Compartilhar via


Delegando errorMode em httpErrors

por Walter Oliver

Aviso: essa funcionalidade não está funcionando conforme o esperado no IIS 7.0. Isso está sendo abordado para a próxima versão. No IIS 7.0, você pode bloquear e desbloquear erros HTTP para sites específicos ou para todo o servidor; mas, atualmente, "lockAllAttributesExcept="errorMode" não está funcionando para httpErrors. No entanto, você pode usar as ideias neste artigo sobre como desbloquear atributos específicos em outras seções de configuração do IIS.

Há casos em que um hoster pode precisar delegar a seus clientes configurações específicas no arquivo "applicationhost.config" sem delegar a seção inteira. A configuração errorMode na seção httpErrors é uma delas, outra é a configuração scriptErrorSentToBrowser na seção ASP. Para fins de solução de problemas, o cliente de um hoster pode querer mostrar Erros Detalhados em clientes remotos. Para habilitá-lo, o hoster precisaria bloquear todos os atributos, exceto errorMode (lockAllAttributesExcept="errorMode") e bloquear o elemento de erro (lockElements="error"). Dessa forma, os clientes podem alterar errorMode de "detailedLocalOnly" para "Detalhado" e obter os Erros Detalhados de todos os erros.

Para delegar a configuração errorMode:

  1. Permita a delegação da seção <httpErrors> em applicationhost.config via overrideModeDefault abrindo %windir%\system32\inetsrv\config\applicationhost.config com um editor de texto e alterando o elemento <section name="httpErrors" overrideModeDefault="Deny" /> da seguinte maneira:

    <section name="httpErrors" overrideModeDefault="Allow" />
    
  2. Use lockAllAttributesExcept e lockElements para permitir apenas a delegação da configuração errorMode. Localize o elemento <httpErrors> e altere da seguinte maneira:

    <httpErrors lockAllAttributesExcept="errorMode" lockElements="error" >
    

    Sua seção httpErrors pode ter esta aparência após a alteração:

    <httpErrors lockAllAttributesExcept="errorMode" lockElements="error"> 
      <error statusCode="401" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="401.htm" />
      <error statusCode="403" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="403.htm" />
      <error statusCode="404" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="404.htm" />
      <error statusCode="405" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="405.htm" />
      <error statusCode="406" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="406.htm" />
      <error statusCode="412" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="412.htm" />
      <error statusCode="500" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="500.htm" />
      <error statusCode="501" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="501.htm" />
      <error statusCode="502" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="502.htm" />
    </httpErrors>
    
  3. Agora você, como hoster, pode usar appcmd para definir a configuração errorMode como "Detalhado" ou "Personalizado" (veja o exemplo abaixo)

    %windir%\system32\inetsrv\appcmd set config "Default Web Site" -section:httpErrors -errorMode:Detailed
    

    ou você pode pedir aos clientes que coloquem a seguinte instrução em seus arquivos web.config:

    <system.webServer>
       <httpErrors errorMode="Detailed"/>
    </system.webServer>
    

Recursos

Para obter mais informações, consulte: