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:

salut A été vu à ce sujet aujourd'hui et a découvert.Il s'avère que c'est le module HTTP "pagenotfound" qui la trace pour WebDav lors de l'enregistrement des documents de bureau.Il ajoute une redirection HTTP 302 lorsque vous souhaitez stocker des documents.Cela ne se produit que si le document n'existe pas, fonctionne bien si vous économisez sur un document existant.Peut être testé pour supprimer / ajouter "pagenotfoundhttpmodule" de web.config webdav fonctionne bien.

 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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top