Странная ошибка в SharePoint Ihttpmodule. (Пользовательская страница 404)
-
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);