Qual é a diferença entre customErrors e httpErrors?

168

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?

Alan T
fonte
1
IMHO - HttpError é um tratamento no nível do IIS para mensagens de erro, enquanto o CustomError é o tratamento no ASP.Net para erros no aplicativo Web. Mas gostaria de saber mais ...
Ensolarado

Respostas:

85

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.

Resumo:

  • Desenvolvimento em VSDSusocustomErrors
  • Publicando o site para IIS6- usarcustomErrors
  • Publicando o site para IIS7uso httpErrors.

e se você desenvolver, VSDSmas publicar paraIIS7 , acho que precisará de ambos.

Pure.Krome
fonte
30
customErrors são para asp.net. Os httpErrors são para o IIS7 e, portanto, manipulam o conteúdo que não passa pelo manipulador .net (por exemplo, .png, .js etc.) Se você deseja páginas de erro para tipos de conteúdo que não sejam do .NET, use páginas de erro do IIS (httpErrors for IIS7 , a interface do usuário para IIS6.)
zcrar70
4
Eu recomendo instalar e usar o IIS 7 Express com Visual Studio para fins de depuração. Ele usará as mesmas opções de configuração do IIS 7 comum, ao contrário da Cassini.
Sean
não é mais necessário usar customErrors por @johnB. E muito necessário? 1.) ative "Enviar erros para o navegador" na seção "ASP". nas Propriedades de depuração 2.) em "Páginas de erro / Editar configurações de recursos", selecione "Erros detalhados". 3.) desabilite "Mostrar mensagens de erro HTTP amigáveis" no IE stackoverflow.com/questions/2640526/…
Kiquenet
136

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

  • / myfakeextensionslessurl -> httpErrors 404
  • /myfakeaspsx.aspx -> customErrors 404
  • /myfakeimage.jpg -> httpErrors 404
  • /throw500.apx -> customErrors 500
  • / throw500 -> customErrors 500

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:

  1. Mostre a exceção real ao visitar a página do problema localmente
  2. Mostrar uma página personalizada quando você visitar a página do problema remotamente
  3. Não redireciona, mas simplesmente mostra o conteúdo da página de erro (por motivos de SEO)
  4. Mostrará o código de status correto

Então, para esclarecer algumas opções em nossa configuração:

  1. <customErrors mode="RemoteOnly". Você pode especificar aqui: On, Off, RemoteOnly.

    • On = Sempre mostrar páginas de erro personalizadas
    • Off = Sempre mostra o erro real
    • RemoteOnly= Mostra o erro localmente, mas mostra a página de erro personalizada remotamente. Então, queremos RemoteOnlydeclaração 1
  2. <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.

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

Maarten Kieft
fonte
Que tipo de relação customErrors - httpErrors e configuração do IIS como "Enviar erros para o navegador" no ASP - as Propriedades de depuração e "Páginas de erro / Editar configurações de recursos", "Erros detalhados". ? stackoverflow.com/questions/2640526/…
Kiquenet
36

<customErrors> versus <httpErrors>


<customErrors>

  • ainda disponível no IIS7 +
  • especificar páginas de erro personalizadas para solicitações tratadas pelo ASP.NET
  • somente lida com solicitações no aplicativo ASP.NET
  • arquivos estáticos, como arquivos HTML ou URLs de diretório ("amigáveis"), não são manipulados

<httpErrors>

  • introduzido no IIS7
  • especificar páginas de erro personalizadas para solicitações tratadas pelo IIS
  • lida com solicitações dentro do aplicativo ASP.NET AND / OR lida com solicitações fora do aplicativo - ASP.NET *
  • todos os arquivos e URLs são manipulados *

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

JohnB
fonte
Talvez útil ** stackoverflow.com/questions/2640526/... ** se combinam httpErrors com "erros de envio para o navegador" e páginas de erro
Kiquenet
3
+1 para a nota it's no loger necesary to use customErrorse a citação, esta é realmente a informação que eu estava atrás :-)
Myster
4

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:

httperrors vs customerrors em webconfig, iis, asp.net

Rohit
fonte