【问题标题】:HttpError iis config throws exception when default path is added添加默认路径时,HttpError iis config抛出异常
【发布时间】:2020-09-16 13:22:24
【问题描述】:

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

<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

现在这与documentation on msdn 直接矛盾

任何帮助将不胜感激!

【问题讨论】:

  • 这个答案对我有帮助 serverfault.com/a/53713/243181 对于 IISExpress applicationHost.config 可以在另一个位置找到 - stackoverflow.com/a/12946477/2164198
  • @IvanSamygin:没有为我修好。
  • 有人解决了吗?我有完全相同的问题。好像defaultPath不起作用。
  • 有人找到解决办法吗?
  • 好吧,这行得通(iis 配置设置),我只是有 existingResponse="Auto" 而不是 existingResponse="Replace"。我的错,对不起。

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


【解决方案1】:

使用 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

【讨论】:

  • 恐怕它不起作用 - 它会显示“缺少必需的属性'路径'”,因为您没有为“错误”条目指定路径属性。你试过你的配置吗?它奏效了吗?我只是想知道,因为在 IIS7 上我遇到了刚才描述的错误。
  • 是的,我已经在 IIS 8.0 Express 上使用手动修改的 web.config 文件尝试了此配置,并且当时运行良好。 (即 defaultPath 属性在内部为所有错误节点分配路径属性)。我猜你在 IIS 管理器中遇到了这个错误,这是由于某种原因(可能是错误)阻止了这种配置......
  • 链接的文档说:An optional string value that contains the default path of an HTTP error file or URL. When nonempty, this value is inherited by the Path property of newly created HttpErrorElement objects.
【解决方案2】:

您不能在 IISExpress 中覆盖 httpErrors “defaultPath”属性,因为 applicationhost.config 锁定了该属性:

<httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">

您可以在此处阅读更多信息:https://support.microsoft.com/en-us/kb/942055 可能会出现此问题:

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

【讨论】:

  • 这实际上似乎不起作用,而不是 500.19 web.config 错误,我得到的是默认的 iis 错误页面而不是我自定义的错误页面。请帮忙。
  • 好吧,这行得通(iis 配置设置),我只是有 existingResponse="Auto" 而不是 existingResponse="Replace"。我的错,对不起。
【解决方案3】:

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

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

改变它的方法是

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

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

【讨论】:

    【解决方案4】:

    用 ~ 试试defaultPath="~/Error/ApplicationError"

    【讨论】:

    • 没有为我修复它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2013-05-24
    相关资源
    最近更新 更多