我有这个配置可以正常工作并重定向以下错误
<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
直接相矛盾
非常感谢任何帮助!!
答案 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
属性已被锁定,因此您不能覆盖它。
更改此方法的方法是
'Configuration Editor'
图标。'system.webServer/httpErrors'
defaultPath
'defaultPath' attribute >
子菜单Unlock attribute
Apply Changes
我通常建议不要这样做,因为您必须在将站点部署到的每台服务器上执行此操作。 (而且我也不确定像Azure Web应用这样的不给您这种访问权限的东西如何处理它)
答案 3 :(得分:-1)
使用〜。
尝试defaultPath="~/Error/ApplicationError"