Pergunta

Eu tenho um IHttpModule personalizado para redirecionar os usuários para minha página 404 aspx.

Este exemplo foi encontrado em algum lugar na internet e esta parte parece funcionar bem, mas hoje os administradores relatam o próximo problema:

Oi foi visto nisso hoje e descobri.Acontece que é o módulo http "PageNotFound" que atrapalha o WebDAV ao salvar documentos do Office.Ele adiciona um redirecionamento http 302 ao armazenar documentos.Isso acontece apenas se o documento não existir, funciona bem se você salvar sobre um documento existente.Pode ser testado para remover/adicionar "PageNotFoundHttpModule" do web.config WebDAV funciona bem.

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

Verifiquei os logs e vejo a próxima exceção:

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

Mas eu realmente não sei o que há de errado com esse tópico e por que foi abortado.Alguma ideia?

Foi útil?

Solução 2

Devemos verificar se o método HTTP não está refinado.E só então use o redirecionamento.

app.Request.HttpMethod! = "PROPFIND"

Outras dicas

Este é o comportamento natural do HttpContext

Ao tentar redirecionar a página, o thread atual será abortado e o sistema lançará uma exceção.

Se você não deseja que o thread seja abortado, passe false para o método de redirecionamento.

resposta.Redirect(mensagem, falso);

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top