发生错误时是否重定向到自定义页面,而不在.net中使用Response.Redirect(url)?

时间:2018-10-29 20:50:12

标签: c# asp.net .net asp.net-mvc .net-4.5

我有一个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();

2 个答案:

答案 0 :(得分:1)

在测试自定义消息时,您是在本地服务器上运行还是在部署应用程序?

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

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

答案 1 :(得分:0)

您可以使用Server.Transfer

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

它不会更改浏览器的地址栏。因此,如果您不了解浏览器就不会知道该错误,则效率会更高。