Erro estranho no sharepoint IHttpModule. (Página 404 personalizada)
-
09-12-2019 - |
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?
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);