Странная ошибка в SharePoint Ihttpmodule. (Пользовательская страница 404)

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/51948

  •  09-12-2019
  •  | 
  •  

Вопрос

У меня есть пользовательский ihttpmodule для перенаправления пользователей на мою страницу 404 ASPX.

Этот пример был найден где-то в Интернете, и эта часть выглядит как работает хорошо, но сегодня администраторы сообщают следующую проблему:

Привет Был увиден на этом сегодня и узнал.Оказывается, это модуль HTTP «PageNOTFOOONG», который трогает его для WebDAV при сохранении от Office Documents.Добавляет HTTP 302 Redirect, когда для хранения документов.Это происходит только в том случае, если документ не существует, работает нормально, если вы сохраните в существующем документе.Можно протестировать для удаления / добавления «PageNOTFOUNDHTTPMODULE» из Web.config WebDAV работает нормально.

 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).
.

Но я действительно не знаю, что делает Gooing с этой нитью и почему ее прервана.Любые идеи?

Это было полезно?

Решение 2

Мы должны проверить, что httpmethod не выделен.И только тогда используйте перенаправление.

app.request.httpmethod!="Propfind"

Другие советы

Это естественное поведение httpcontext

Когда вы пытаетесь перенаправить страницу, текущий поток будет прервана, и система бросит исключение.

Если вы не хотите, чтобы нить прервать, пропустите false для перенаправления метода.

Ответ.redirect (сообщение, false);

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top