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?

Foi útil?

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 - usar customErrors
  • A publicação do site para IIS6 - usar customErrors
  • A publicação do site para IIS7 - usar httpErrors.

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á:

  1. Mostre a exceção real quando você visitar a página do problema localmente
  2. Mostre uma página personalizada quando você visitar a página do problema remotamente
  3. Não vai redirecionar, mas simplesmente mostre 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 mostre páginas de erro personalizadas
    • Off = Sempre mostre o erro real
    • RemoteOnly = Mostrar o erro localmente, mas mostre a página de erro personalizada remotamente. Então nós queremos RemoteOnly para a declaração 1
  2. <customErrors redirectMode="ResponseRewrite". Você pode especificar aqui: ResponseRedirect ou ResponseRewrite. o ResponseRedirect 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.

  3. <httpErrors errorMode="DetailedLocalOnly". Este é o equivalente ao customErrors 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:

Httperrors vs CustomErrors em WebConfig, IIS, Asp.net

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top