如果不在 .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" />
我有一个 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" />