Qual é a diferença entre as seções customErrorse httpErrorsdo 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 customErrorse httpErrorsdo 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.
VSDSusocustomErrorsIIS6- usarcustomErrorsIIS7uso httpErrors.e se você desenvolver, VSDSmas 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 RemoteOnlydeclaração 1<customErrors redirectMode="ResponseRewrite". Você pode especificar aqui: ResponseRedirectou ResponseRewrite. O ResponseRedirectmodo 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 customErrorsmodo. 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)
ExecuteURLserve conteúdo dinâmico, como uma página .aspx (o pathvalor 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 customErrorse 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: