Qual é a diferença entre customErrors e httpErrors?
-
21-09-2019 - |
Pergunta
Qual é a diferença entre o customErrors
e httpErrors
secções da web.arquivo de configuração em ASP.NET aplicações MVC?
Quais são as diretrizes para o uso de cada seção?
Solução
Isenção de responsabilidade:Esta é a minha experiência e não comprovado o fato.
Ambos são utilizados para definir o tratamento de erro para um site, mas diferente de software refere-se a configuração diferente de elementos.
customErrors
são um legado (para trás compatível) elemento usado pelo Visual Studio Development Server (aka.VSDS ou Cassini).
httpErrors
são o novo elemento que é utilizado apenas por IIS7.
Isso destaca a possível problema ao desenvolvimento de ASP.NET sites enquanto estiver usando VSDS em vez do IIS local.
Também, consulte este post, por mim mesmo sobre como gerir mensagens de erro com o IIS7, se você deseja ter controle total do erro de saída.
Resumo:
- Desenvolvimento em
VSDS
- usarcustomErrors
- A publicação do site para
IIS6
- usarcustomErrors
- A publicação do site para
IIS7
- usarhttpErrors
.
e se você desenvolver com VSDS
mas publicar IIS7
, então eu acho que u vai precisar de dois.
Outras dicas
*Atualizado em abril de 2016
O atributo CustomErrors é usado quando o código .NET está lançando uma exceção (404, 403, 500 etc) e o atributo httperrors é usado quando o próprio IIS está lançando uma exceção.
- /myfakextensionslessurl -> httperrors 404
- /myfakeaspsx.aspx -> CustomErrors 404
- /myfakeImage.jpg -> httperrors 404
- /hrow500.apx -> CustomErrors 500
- /Throw500 -> CustomErrors 500
Existem muitas armadilhas tentando configurar isso corretamente. Então, se você está procurando um exemplo rápido, as duas melhores opções que você tem são:
Exemplo 1: Usando páginas HTML
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="403" redirect="/Error403.html" />
<error statusCode="404" redirect="/Error404.html" />
<error statusCode="500" redirect="/Error500.html" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="403" responseMode="File" path="Error403.html" />
<error statusCode="404" responseMode="File" path="Error404.html" />
<error statusCode="500" responseMode="File" path="Error500.html" />
</httpErrors>
</system.webServer>
Exemplo 2: Usando páginas ASPX
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="403" redirect="/Error403.aspx" />
<error statusCode="404" redirect="/Error404.aspx" />
<error statusCode="500" redirect="/Error500.aspx" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="403" responseMode="ExecuteURL" path="Error403.aspx" />
<error statusCode="404" responseMode="ExecuteURL" path="Error404.aspx" />
<error statusCode="500" responseMode="ExecuteURL" path="Error500.aspx" />
</httpErrors>
</system.webServer>
E nas páginas de erro ASPX, você precisa fazer algo assim (Exemplo 404 Página):
<%
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
%>
Nota: Usando a extensão, menos URLs na seção CustomErrors é não é possivel!. (sem hacks)
Uma contorna é desativar erros personalizados e deixar erros HTTP lidar com a página personalizada. Um amigo criou essa configuração, quando encontrar algum tempo, compartilharei o código.
Fundo
Uma boa página de erro personalizada será:
- Mostre a exceção real quando você visitar a página do problema localmente
- Mostre uma página personalizada quando você visitar a página do problema remotamente
- Não vai redirecionar, mas simplesmente mostre o conteúdo da página de erro (por motivos de SEO)
- Mostrará o código de status correto
Então, para esclarecer algumas opções em nossa configuração:
<customErrors mode="RemoteOnly"
. Você pode especificar aqui:On
,Off
,RemoteOnly
.On
= Sempre mostre páginas de erro personalizadasOff
= Sempre mostre o erro realRemoteOnly
= Mostrar o erro localmente, mas mostre a página de erro personalizada remotamente. Então nós queremosRemoteOnly
para a declaração 1
<customErrors redirectMode="ResponseRewrite"
. Você pode especificar aqui:ResponseRedirect
ouResponseRewrite
. oResponseRedirect
O modo redirecionará a página de erro para a página de erro personalizada. Para um rastreador de link (SEO), isso resultará em 302 -> 500, mas você deseja que o rastreador de link obtenha um erro 500.<httpErrors errorMode="DetailedLocalOnly"
. Este é o equivalente aocustomErrors
modo. Opções que você tem:Custom
,Detailed
,DetailedLocalOnly
.
Uma boa postagem no blog que me ajudou muito é: http://benfoster.io/blog/aspnet-mvc-custom-error-pages
<customErrors>
contra <httpErrors>
<customErrors>
- ainda disponível no iis7+
- Especifique páginas de erro personalizado para solicitações tratadas pelo ASP.NET
- Somente lida com solicitações no aplicativo ASP.NET
- Arquivos estáticos, como URLs HTML ou diretório ("amigável"), não são tratados
<httpErrors>
- introduzido no iis7
- Especifique páginas de erro personalizado para solicitações tratadas pelo IIS
- lida com solicitações no aplicativo ASP.NET E/ou Lida com solicitações fora do aplicativo - ASP.NET *
- Todos os arquivos e URLs são tratados *
Nota: não é mais necessário usar
customErrors
Fonte citado: Páginas personalizadas de 404 e erro no ASP.NET (Excelente artigo)
ExecuteURL
serve conteúdo dinâmico como uma página .aspx (o path
valor tem que ser um URL relativo do servidor):
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" >
<remove statusCode="404"/>
<error statusCode="404" responseMode="ExecuteURL" path="/error.aspx" />
</httpErrors>
</system.webServer>
File
Serve um arquivo de erro personalizado, como uma página .html:
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
<remove statusCode="404"/>
<error statusCode="404" path="404.html" />
</httpErrors>
</system.webServer>
Referência: Erros http (www.iis.net)
Para mais detalhes, leia o link www.iis.net acima
A seção de erros na Web Config é para fornecer abordagem de manuseio de erros HTTP personalizada. Existem duas seções, um dos personalizadores dentro do sistema de seção.
CustomErrors:Esta seção estava em uso antes da introdução do IIS 7, o IIS 6 5 e antes de usar completamente esta seção para lidar com erros HTTP personalizados de acordo com o código de status HTTP.
httperrors:IIS 7 e posteriormente use esta seção, bem como CustomErrors Seção para lidar com erros HTTP personalizados com base em suas extensões de arquivo se solicitado registro de extensão de página no ISAPI DLL (.aspx, ashx, .asmx, .svc etc) como index.aspx, então iis pegue a configuração de CustomeErrors seção mais ele pega a configuração de httperrors (O modo hospedado do IIS 7 deve ser definido como humor integrado, não clássico)
Abaixo estão os exemplos que são para o link de verificação de manuseio de 404 de 404: