我的配置可以正常工作并正确重定向以下错误
<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>
但是当我添加以下默认路径来尝试添加一个包罗万象时
<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
现在这直接与msdn上的文档相矛盾
任何帮助将不胜感激!!
您无法覆盖 IISExpress 中的 httpErrors“defaultPath”属性,因为 applicationhost.config 锁定了该属性:
<httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
您可以在此处阅读更多相关信息:https://support.microsoft.com/en-us/kb/942055可能会出现此问题:
当 IIS 配置文件的指定部分被锁定时 更高的配置级别。要解决此问题,请解锁 指定的部分,或者不要在该级别使用它。了解更多 有关配置锁定的信息,请参阅如何在 IIS 中使用锁定 7.0 配置。
使用 defaultPath 属性防止在 error 节点中使用 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
这是因为 IIS 默认情况下(我刚刚在 IIS 10 中发现了这一点)在服务器级别锁定
defaultPath
。
错误表示某些父
web.config
属性已被锁定,因此不允许您覆盖它。
改变这个的方法是
'Configuration Editor'
图标。'system.webServer/httpErrors'
defaultPath
'defaultPath' attribute >
子菜单Unlock attribute
Apply Changes
不过,我通常建议不要这样做,因为您必须在部署站点的每台服务器上执行此操作。 (而且我也不确定像 Azure Web 应用程序这样不给你这种级别的访问权限的东西如何处理它)
不确定它是否有帮助,因为它是一个旧线程,但如果有人需要以编程方式执行此操作,您可以使用类似的东西
using (ServerManager serverManager = new ServerManager())
{
Configuration hostConfig = serverManager.GetApplicationHostConfiguration();
ConfigurationSection confSection = hostConfig.GetSection(sectionName);
confSection.SetMetadata("lockAttributes", "");
serverManager.CommitChanges();
}
并使用“system.webServer/httpErrors”作为部分名称。属性defaultPath在IIS10中仍然被锁定
尝试用〜来
defaultPath="~/Error/ApplicationError"
。