当应用程序中发生任何异常时,我正在尝试重定向到asp.net mvc5的global.asax文件中的错误页面。执行Response.Redirect行后,什么都没有发生。
它根本不会重定向到错误页面,该错误页面在~~ View \ Shared \ Error.cshtml路径中可用
protected void Application_Error(object sender, EventArgs e)
{
Server.ClearError();
Response.Clear();
HttpContext.Current.Response.Redirect("~\View\Shared\Error.cshtml");
//return;
}
在webconfig中
<system.web>
<customErrors mode="On" defaultRedirect="~\View\Shared\Error.cshtml" />
</system.web>
我不确定出了什么问题。
我的错误控制器:
public class ErrorController : Controller
{
// GET: Error
public ActionResult Error()
{
return View("Error");
}
}
最佳答案
我不建议您使用Global.asax,除非您有一些自定义逻辑。我建议使用web.config。请注意,由于MVC使用路由而不是物理文件,因此您应该在web.config中使用如下所示的内容:<httpErrors errorMode="Custom"> <remove statusCode="404"/> <error statusCode="404" path="/error/404" responseMode="ExecuteUrl"/><httpErrors>
但是,如果您要调用某个物理文件(例如html),则应以这种方式使用它:<httpErrors errorMode="Custom"> <remove statusCode="404"/> <error statusCode="404" path="/erro404.html" responseMode="File"/><httpErrors>
现在,回到自定义逻辑。如果您确实需要使用Global.asax,我建议您使用以下代码:
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
if (httpException == null)
{
routeData.Values.Add("action", "Index");
}
else //It's an Http Exception, Let's handle it.
{
switch (httpException.GetHttpCode())
{
case 404:
// Page not found.
routeData.Values.Add("action", "HttpError404");
break;
case 500:
// Server error.
routeData.Values.Add("action", "HttpError500");
break;
// Here you can handle Views to other error codes.
// I choose a General error template
default:
routeData.Values.Add("action", "General");
break;
}
}
// Pass exception details to the target error View.
routeData.Values.Add("error", exception);
// Clear the error on server.
Server.ClearError();
// Avoid IIS7 getting in the middle
Response.TrySkipIisCustomErrors = true;
// Call target Controller and pass the routeData.
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(
new HttpContextWrapper(Context), routeData));
}
关于c# - asp.net mvc Response.Redirect在global.asax中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28068559/