我有一个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.RRedirect(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();
如果您在本地运行,RemoteOnly
atrribute就是您的问题,因为它只向不在本地web服务器上运行的用户显示自定义消息。将其更改为On
应该可以解决您的问题,如果出现任何错误,您将被重定向到"~/PageErrors/GeneralError.aspx"
编辑:要启用重定向:<customErrors mode="On" defaultRedirect="~/PageErrors/GeneralError.aspx" />
您可以使用Server.Transfer.
Server.Transfer("~/PageErrors/GeneralError.aspx")
它不会更改浏览器的地址栏。因此,如果你不知道浏览器会知道错误,那么效率会更高。