如果不在 .net 中使用 Response.Redirect(url),则在出现错误时重定向到自定义页面?

Redirect to custom page in case of error without using Response.Redirect(url) in .net?

我有一个 asp.net 4.5 MVC 网络项目。在 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>

我想要的是在不使用 Response.Redirect(url) 的情况下,在后面代码中的函数 DoProcess(..) 发生错误的情况下,将用户重定向到 GeneralError 页面。我尝试的是使用代码 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();

您可以使用 Server.Transfer

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

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

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

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

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