我需要有一个自定义错误页面来处理所有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。
有什么帮助吗?
答案 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”方法可以帮助您解决问题。