SharePoint IHTTPModule의 이상한 오류. (사용자 정의 404 페이지)
-
09-12-2019 - |
문제
사용자가 404 개의 ASPX 페이지로 사용자를 리디렉션 할 수있는 사용자 정의 ihttpmodule이 있습니다.
이 예제는 인터넷 어딘가에서 발견 되었으며이 부분은 잘 작동하지만 오늘날 관리자는 다음 문제를보고합니다 :
안녕하세요
오늘 이걸 보았고 알아 냈습니다.Office 문서에서 저장할 때 WebDAV 용으로 Troble IT를 WebDAV에서 트로블하는 HTTP 모듈 "PageNotFound"라는 점을 밝힙니다.문서를 저장할 때 HTTP 302 리디렉션을 추가합니다.이는 문서가 존재하지 않는 경우에만 발생합니다. 기존 문서를 저장하면 잘 작동합니다.Web.config WebDAV에서 "pagenotfoundhttpmodule"을 제거 / 추가하기 위해 테스트 할 수 있습니다.
.
void ApplicationPreSendRequestContent(object sender, EventArgs e)
{
HttpResponse response = app.Response;
string requestedUrl = app.Request.Url.AbsolutePath;
if (string.IsNullOrEmpty(requestedUrl))
{
LoggingService.WriteError("PageNotFoundHttpModule. PreSend request: HttpApplication Request.Url.AbsolutePath is null ");
return;
}
try
{
var urlElements = requestedUrl.Split('/');
if (urlElements.Length > 0)
{
int pageElementIndex = urlElements.Length - 1;
string pageName = urlElements[pageElementIndex] as string;
if (string.IsNullOrEmpty(pageName))
{
pageName = string.Empty;
}
if (response.StatusCode == 404 && response.ContentType.Equals("text/html", StringComparison.CurrentCulture))
{
var pathLowercase = Constants.PageNotFoundUrl.ToLower().Trim();
var message = string.Format("{0}?oldUrl={1}&k={2}", pathLowercase, requestedUrl, pageName);
if (!pathLowercase.EndsWith(pageName.ToLower().Trim()))
{
response.Redirect(message);
}
}
}
}
catch (Exception ex)
{
LoggingService.WriteError(ex, "PageNotFoundHttpModule. Exception while working");
}
}
로그를 확인하고 다음 예외가 표시됩니다.
.
PageNotFoundHttpModule. Exception while working Thread was being aborted.
at System.Threading.Thread.AbortInternal()
at System.Threading.Thread.Abort(Object stateInfo)
at System.Web.HttpResponse.End()
at PageNotFoundHttpModule.ApplicationPreSendRequestContent(Object sender, EventArgs e).
그러나 나는이 스레드에 끈적 끈적한 끈적 끈적한 것을 정말로 모른다. 그리고 왜 그 중단 된 이유를 알지 못한다.어떤 아이디어도 있습니까?
해결책 2
HTTPMETHOD가 이익을 얻지 않는지 확인해야합니다.그리고 오직 리디렉션 만 사용하십시오.
app.request.httpmethod!="propfind"
다른 팁
이것은 httpContext 의 자연스러운 동작입니다
페이지를 리디렉션하려고하면 현재 스레드가 중단되고 시스템이 예외를 throw합니다.
스레드가 중단을 원하지 않으면 Redirect 메서드에 false를 전달하십시오.
response.Redirect (메시지, false);