문제

사용자가 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);

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top