【问题标题】:How to show a dynamic custom error page for all http errors?如何显示所有 http 错误的动态自定义错误页面?
【发布时间】:2019-06-02 08:32:12
【问题描述】:

我需要一个自定义错误页面来处理所有 http 错误。当发生http错误时,页面应显示自定义页面,其内容必须根据http错误状态码动态生成。 当发生特定的 http 错误时,我一半设法显示自定义 html。例如 404。但是有两个问题。 1.我需要重定向到一个.cshtml,所以我可以对响应做一些处理,并根据http错误状态码创建内容。 2. 我需要一种方法将所有错误重定向到这个 .cshtml 文件。

我已经阅读了文档并在 SO 中搜索了类似的问题,都关注了它们,但没有任何进展。

目前我在web.config 中有以下几行:

    <httpErrors errorMode="Custom" defaultResponseMode="File" defaultPath="CustomError.htm">
      <clear />
      <error path="CustomError.htm" responseMode="File" statusCode="403"/>
    </httpErrors>

这将显示文件CustomError.htm 的内容,该文件位于文件web.config 的同一路径中。 但是当我阅读文档时,我希望这个配置可以工作:

    <httpErrors errorMode="Custom" defaultResponseMode="File" defaultPath="CustomError.htm">
      <clear />
    </httpErrors>

但它没有显示 CustomError.htm 文件的内容,而是显示一个空白页面,其中包含以下语句: You do not have permission to view this directory or page. 即使是处理单个 httpError,我也无法使用 .cshtml,我不得不使用 html 文件。 我实际上有以下 cshtml 文件:Views/Error/PageNotFound.cshtml 它有一个控制器和一个 actionResult 方法,称为:PageNotFound 现在,当我这样做时:

    <httpErrors errorMode="Custom" defaultResponseMode="File" defaultPath="CustomError.htm">
      <clear />
      <error path="~/Error/PageNotFound" responseMode="ExecuteURL" statusCode="404"/>
    </httpErrors>

然后,浏览器会抛出未找到的错误。

当我将 responseMode 更改为 Redirect 时,路径会一遍又一遍地附加到现有的 url 中并且不起作用。 正如您在标签中看到的,我在 Windows 10 上使用 asp.net mvc 和 IIS 10。 那么有什么帮助吗?

【问题讨论】:

    标签: c# asp.net-mvc http-error iis-10


    【解决方案1】:

    我不能 100% 确定我没有正确理解您,但尝试使用此代码是为了将其用于我的自定义错误,并且我 100% 确定它可以正常工作

    <customErrors mode="Off" defaultRedirect="/Error/Default">
      <error statusCode="404" redirect="/Error/E404" />
      <error statusCode="500" redirect="/Error/E500" />
      <error statusCode="403" redirect="/Error/E403" />
    </customErrors>
    

    您可以在继续时添加更多状态代码

    【讨论】:

    • 欲了解更多信息,请访问以下线程stackoverflow.com/questions/2480006/…
    • customErrors 在 IIS 7.5+ 中对静态页面不起作用。
    • defaultRedirect 是否也适合您?例如,如果您遇到 403 错误,是否会显示 /error/default 的内容,或者您​​将获得默认页面?
    • defaultRedirect 将显示在所有错误中,如果未列出如果您希望显示 403 的特定错误页面,则需要将以下代码添加到 customerrors
    【解决方案2】:

    @arm,请通过以下链接

    https://www.codeproject.com/Articles/850062/Exception-handling-in-ASP-NET-MVC-methods-explaine

    我希望,重写“OnException”方法可以帮助您解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      相关资源
      最近更新 更多