我有一个asp.net 4.5 MVC Web项目。在web.config中,我有以下几行:
...
<httpErrors errorMode="DetailedLocalOnly">
<clear />
<error statusCode="404" path="/PageErrors/GeneralError.aspx?e=404" responseMode="ExecuteURL" />
...
</httpErrors>
...
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="~/PageErrors/GeneralError.aspx" />
...
</system.web>
我想要的是将用户重定向到GeneralError页面,以防后面的代码中的函数DoProcess(..)中发生错误,而无需使用Response.Redirect(url)。我试图通过使用代码404手动引发错误(也尝试使用其他数字):
public void DoProcess(..)
{
try
{
...
}
catch(Exception ex)
{
//context.Response.Redirect("/Errors/GeneralError.aspx");
throw new HttpException(404, "Error Message");
}
}
尽管它不起作用,但是如果确实没有页面(如果出现真正的404错误),我将被重定向到自定义GeneralError.aspx。在像throw new HttpException();
这样的异常中不使用任何参数也没有帮助。
为什么手动引发的错误不起作用,我该怎么办?任何帮助将不胜感激。
编辑:在我尝试过的下面,也没有帮助,说“可能暂时关闭,或者它已经永久移至新的网址”。 :
context.Response.Clear();
context.Response.StatusCode = 404;
context.Response.End();
答案 0 :(得分:1)
在测试自定义消息时,您是在本地服务器上运行还是在部署应用程序?
如果您在本地运行,RemoteOnly
属性是您的问题,因为它只会向未在本地Web服务器上运行的用户显示自定义消息。
将其更改为On
应该可以解决您的问题,如果发生任何错误,您将被重定向到"~/PageErrors/GeneralError.aspx"
编辑:要启用重定向:
<customErrors mode="On" defaultRedirect="~/PageErrors/GeneralError.aspx" />
答案 1 :(得分:0)
您可以使用Server.Transfer。
Server.Transfer("~/PageErrors/GeneralError.aspx")
它不会更改浏览器的地址栏。因此,如果您不了解浏览器就不会知道该错误,则效率会更高。