如何显示所有http错误的动态自定义错误页面?

时间:2019-06-02 08:32:12

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

我需要有一个自定义错误页面来处理所有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 它有一个控制器和一个名为PageNotFound的actionResult方法:现在,当我这样做时:

    <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。 有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

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

template<class T>
void wrapper(T&& arg)
{
    foo(forward<T>(arg).get());
}

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

答案 1 :(得分:0)

@arm,请通过以下链接

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

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