Qual é a diferença entre as seções customErrors
e httpErrors
do arquivo web.config nos aplicativos ASP.NET MVC?
Quais são as diretrizes para o uso de cada seção?
Qual é a diferença entre as seções customErrors
e httpErrors
do arquivo web.config nos aplicativos ASP.NET MVC?
Quais são as diretrizes para o uso de cada seção?
Respostas:
Disclaimer: Isso é da minha experiência e não um fato comprovado.
Ambos são usados para definir o tratamento de erros para um site, mas software diferente se refere a diferentes elementos de configuração.
customErrors
é um elemento legado (compatível com versões anteriores), usado pelo Visual Studio Development Server (também conhecido como VSDS ou Cassini).
httpErrors
são o novo elemento usado apenas pelo IIS7.
Isso destaca o possível problema ao desenvolver sites ASP.NET ao usar o VSDS em vez do IIS local.
Além disso, refira-me a esta postagem sobre como lidar com mensagens de erro com o IIS7, se desejar ter controle total da saída do erro.
VSDS
usocustomErrors
IIS6
- usarcustomErrors
IIS7
uso httpErrors
.e se você desenvolver, VSDS
mas publicar paraIIS7
, acho que precisará de ambos.
* 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.
Existem muitas armadilhas tentando configurar isso corretamente. Portanto, se você está procurando um exemplo rápido, as 2 melhores opções 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 (página 404 do exemplo):
<%
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
%>
Nota: Não é possível usar extensões com menos URLs na seção customErrors ! .(sem hacks)
Uma solução é desabilitar os erros personalizados e permitir que os erros http tratem a página personalizada. Um amigo criou essa configuração; quando eu encontrar algum tempo, compartilharei o código.
fundo
Uma boa página de erro personalizada:
Então, para esclarecer algumas opções em nossa configuração:
<customErrors mode="RemoteOnly"
. Você pode especificar aqui: On
, Off
, RemoteOnly
.
On
= Sempre mostrar páginas de erro personalizadasOff
= Sempre mostra o erro realRemoteOnly
= Mostra o erro localmente, mas mostra a página de erro personalizada remotamente. Então, queremos RemoteOnly
declaração 1<customErrors redirectMode="ResponseRewrite"
. Você pode especificar aqui: ResponseRedirect
ou ResponseRewrite
. O ResponseRedirect
modo redirecionará a página de erro para a página de erro personalizada. Para um rastreador de links (SEO), isso resultará em 302 -> 500, mas você deseja que o rastreador de links receba um erro 500.
<httpErrors errorMode="DetailedLocalOnly"
. É o equivalente ao customErrors
modo. As opções que você tem: Custom
, Detailed
, DetailedLocalOnly
.
Um bom post no blog que me ajudou muito é: http://benfoster.io/blog/aspnet-mvc-custom-error-pages
<customErrors>
versus <httpErrors>
<customErrors>
<httpErrors>
Nota: não é mais necessário usar
customErrors
Fonte citada: 404 personalizadas e páginas de erro no ASP.NET (excelente artigo)
ExecuteURL
serve conteúdo dinâmico, como uma página .aspx (o path
valor deve ser um URL relativo ao 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
exibe 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 de HTTP (www.iis.net)
para mais detalhes, leia o link www.iis.net acima
it's no loger necesary to use customErrors
e a citação, esta é realmente a informação que eu estava atrás :-)
A seção de erros na configuração da web é para fornecer uma abordagem personalizada de tratamento de erros http, existem duas seções, uma customErrors dentro da seção system.web e outra httpErrors dentro da seção system.webServer (conforme fornecido abaixo)
customErrors: Esta seção estava em uso antes da introdução do IIS 7, do IIS 6 5 e antes de usar completamente esta seção para manipular erros http personalizados de acordo com o código de status http.
httpErrors: o IIS 7 e posterior usam esta seção, bem como a seção customErrors , para manipular erros http personalizados com base em suas extensões de arquivo, se solicitado, registre-se na extensão de página com a DLL ISAPI (.aspx, ashx, .asmx, .svc etc), como index.aspx Configuração de seleção do IIS na seção customeErrors , caso contrário, ela escolhe a configuração de httpErrors (o modo hospedado do IIS 7 deve ser definido como um humor integrado, não clássico)
Abaixo estão os exemplos para o link de verificação de tratamento de erros 404: