gpt4 book ai didi

iis-7.5 - 自定义错误不适用于 IISExpress

转载 作者:行者123 更新时间:2023-12-03 22:29:05 24 4
gpt4 key购买 nike

我有一个 asp.net mvc 应用程序,正在尝试使用 IISExpress 解决自定义错误。

在 Casini 中工作正常:

<customErrors mode="On" defaultRedirect="/error">
<error statusCode="404" redirect="/error/notfound"/>
</customErrors>

当我之前将 mvc 站点部署到 IIS (7.5) 时,我所要做的就是设置我的自定义错误:
<httpErrors errorMode="Detailed"/>

我已经尝试在 httpErrors 部分中明确指定状态代码,但没有任何效果。下面是一个例子:
<httpErrors errorMode="Detailed" defaultResponseMode="Redirect">
<clear/>
<error statusCode="404" path="/error/notfound"/>
</httpErrors>

有任何想法吗?

谢谢

最佳答案

这部分是由于我对自定义错误的实际调用方式的误解以及(恕我直言),asp.net mvc 中的错误处理有点困惑。

第一个问题是,在我的许多操作方法中,我正在检查对象是否存在,例如博客文章,如果博客文章为空,则返回 HttpNotFoundResult。我假设这会显示我为 404 错误设置的自定义错误页面。

然而,这种情况并非如此。返回 HttpNotFoundResult 只是将响应的状态代码设置为 404。其余的由 IIS 处理,显示 IIS 404 错误页面或由您的浏览器(如果它有自己的自定义错误页面)处理。

这里的一种解决方案是返回一个 HttpException 使用您的自定义错误页面,因为该请求是由 asp.net 处理的。

我选择创建一个新的 ActionResult,它允许我指定一个 View 以及一个 http 状态代码。我更喜欢这个而不是抛出异常。

下一个问题是默认情况下,一个新的 MVC 项目定义了一个贪婪的路由。如果您向 /foo/bar 提出请求默认的 MvcHandler 将寻找一个名为 Foo 的 Controller .当它找不到它时,它将返回 404。

我已经删除了默认路由并且没有贪婪的路由。这意味着与我的任何路由都不匹配的 url 将不会被 asp.net 处理并且只会回退到 IIS。

这里的解决方案是在我的路由配置底部创建一个通配符路由来匹配 全部 其他请求并将它们转发到自定义 PageNotFound 操作,该操作将状态代码设置为 404 并显示我的自定义 View 。

有些事情值得指出。

  • 您需要设置 httpErrors errorMode="Detailed"用于在 IIS/IISExpress 中显示的自定义错误页面。然而,其余的可以单独留下。
  • 设置 defaultRedirect customErrors 中的路径部分对 500 错误没有影响。这是因为全局HandleErrorAttribute处理所有 500 个错误,只查找一个名为“错误”的 View 来显示。这意味着如果您的自定义错误页面实际上是一个 Controller 操作,则不会调用它。即使您明确指定了 500 错误页面,上述情况也是正确的。
  • 但是,您仍应保留 defaultRedirect 路径,因为如果未明确指定,它将用于其他状态代码。
  • 关于iis-7.5 - 自定义错误不适用于 IISExpress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6308186/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com