添加默认路径时,HttpError iis config抛出异常

时间:2014-03-28 10:20:02

标签: asp.net iis-7 web-config custom-error-pages

我有这个配置可以正常工作并重定向以下错误

<httpErrors errorMode="Custom" 
        existingResponse="Replace" 
        defaultResponseMode="ExecuteURL" >
  <remove statusCode="403" />
  <remove statusCode="404" />
  <remove statusCode="500" />
  <error statusCode="403" responseMode="ExecuteURL" path="/Error/AccessDenied" />
  <error statusCode="404" responseMode="ExecuteURL" path="/Error/PageNotFound" />
  <error statusCode="500" responseMode="ExecuteURL" path="/Error/ApplicationError" />
</httpErrors>

但是当我添加以下默认路径以尝试添加catch all

<httpErrors errorMode="Custom" 
        existingResponse="Replace" 
        defaultResponseMode="ExecuteURL" 
        defaultPath="/Error/ApplicationError">

服务器抛出web.config错误

HTTP Error 500.19 - Internal Server Error
The requested page cannot be accessed because the related configuration data for the page is invalid.
Module     CustomErrorModule

现在这与documentation on msdn

直接相矛盾

非常感谢任何帮助!!

4 个答案:

答案 0 :(得分:8)

使用 defaultPath 属性可阻止错误节点中使用 path 属性。所以下面的配置会起作用(但是当然它会为这里定义的所有HTTP错误显示相同的错误页面):

<httpErrors errorMode="Custom" existingResponse="Replace"
  defaultResponseMode="ExecuteURL" defaultPath="/Error/ApplicationError">
  <remove statusCode="403" />
  <remove statusCode="404" />
  <remove statusCode="500" />
  <error statusCode="403" responseMode="ExecuteURL" />
  <error statusCode="404" responseMode="ExecuteURL" />
  <error statusCode="500" responseMode="ExecuteURL" />
</httpErrors>

相关文档:https://msdn.microsoft.com/en-us/library/ms690576(v=vs.90).aspx

答案 1 :(得分:4)

由于applicationhost.config已锁定该属性,因此无法覆盖IISExpress中的httpErrors“defaultPath”属性:

<httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">

您可以在此处详细了解:https://support.microsoft.com/en-us/kb/942055可能会出现此问题:

  

当IIS配置文件的指定部分被锁定时   更高的配置级别。要解决此问题,请解锁   指定的部分,或不在该级别使用它。更多   有关配置锁定的信息,请参阅How to Use Locking in IIS 7.0 Configuration

答案 2 :(得分:0)

默认情况下这是因为IIS(我刚刚在IIS 10中发现了IIS)在服务器级别锁定了defaultPath

错误是因为某些父web.config属性已被锁定,因此您不能覆盖它。

更改此方法的方法是

  1. 打开IIS
  2. 在树中选择顶级节点(最有可能使用您的服务器/计算机名称)
  3. 单击最后一行中的'Configuration Editor'图标。
  4. 在顶部的部分下拉列表中输入'system.webServer/httpErrors' Configuration Editor -> httpErrors -> defaultPath attribute
  5. 右键单击defaultPath
  6. 转到'defaultPath' attribute >子菜单
  7. 点击Unlock attribute
  8. 点击右上角的Apply Changes

我通常建议不要这样做,因为您必须在将站点部署到的每台服务器上执行此操作。 (而且我也不确定像Azure Web应用这样的不给您这种访问权限的东西如何处理它)

答案 3 :(得分:-1)

使用〜。

尝试defaultPath="~/Error/ApplicationError"