Erreur étrange dans SharePoint IHTPMOdule. (Page 404 personnalisée)
-
09-12-2019 - |
Question
J'ai personnalisé IHTPMOdule pour rediriger les utilisateurs à ma page 404 ASPX.
Cet exemple a été trouvé quelque part sur Internet et cette partie ressemble à bien travailler, mais aujourd'hui les administrateurs rapporte le problème suivant:
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");
}
}
J'ai vérifié des journaux et je vois la prochaine exception:
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).
Mais je ne sais vraiment pas ce qui goûte mal avec ce fil et pourquoi c'est avorté.Des idées?
La solution 2
Nous devrions vérifier que httpmethod n'est pas présenté.Et seulement alors utilisez Redirection.
app.request.httpmethod!="Procfind"
Autres conseils
C'est le comportement naturel de httpcontext
Lorsque vous essayez de rediriger la page, le fil actuel sera abandonné et le système lancera une exception.
Si vous ne voulez pas que le fil interrompre, passez FALSE à rediriger la méthode.
réponse.redirect (message, false);