如果出现错误,不使用响应重定向到自定义页面.是否在.net中重定向(url)



我有一个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();
测试自定义消息时,您是在本地服务器上运行还是部署了应用程序?

如果您在本地运行,RemoteOnlyatrribute就是您的问题,因为它只向不在本地web服务器上运行的用户显示自定义消息。将其更改为On应该可以解决您的问题,如果出现任何错误,您将被重定向到"~/PageErrors/GeneralError.aspx"

编辑:要启用重定向:<customErrors mode="On" defaultRedirect="~/PageErrors/GeneralError.aspx" />

您可以使用Server.Transfer.

Server.Transfer("~/PageErrors/GeneralError.aspx") 

它不会更改浏览器的地址栏。因此,如果你不知道浏览器会知道错误,那么效率会更高。