Asp.net mvc 无法在MVC应用程序中的HTTP 403上显示自定义错误页
我的MVC应用程序中的Global.asax.cs文件中有以下代码,它捕获500个和404个错误,并调用我的ErrorsController,它根据代码返回我的自定义错误页。这个很好用。但是这段代码也应该捕获403个错误(未经授权),这样我的控制器也会显示相应的视图。但当我运行它时,我会看到一个IIS页面显示未经授权的消息。如何让此代码调用我的ErrorsController,接收403代码并显示我的自定义视图 我测试它的方式是在我的一个操作上放置一个[Authorize]属性并调用该操作。我应该得到403错误,并且应该显示我的自定义错误页面Asp.net mvc 无法在MVC应用程序中的HTTP 403上显示自定义错误页,asp.net-mvc,Asp.net Mvc,我的MVC应用程序中的Global.asax.cs文件中有以下代码,它捕获500个和404个错误,并调用我的ErrorsController,它根据代码返回我的自定义错误页。这个很好用。但是这段代码也应该捕获403个错误(未经授权),这样我的控制器也会显示相应的视图。但当我运行它时,我会看到一个IIS页面显示未经授权的消息。如何让此代码调用我的ErrorsController,接收403代码并显示我的自定义视图 我测试它的方式是在我的一个操作上放置一个[Authorize]属性并调用该操作。我应
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Server.ClearError();
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Errors");
routeData.Values.Add("action", "Feedback");
routeData.Values.Add("exception", exception);
if (exception.GetType() == typeof(HttpException))
{
routeData.Values.Add("statusCode", ((HttpException)exception).GetHttpCode());
}
else
{
routeData.Values.Add("statusCode", 500);
}
IController controller = new ErrorsController();
controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
Response.End();
}
当您使用Authorize属性时,当授权失败时不会触发应用程序错误,它只会返回一个错误。这就是为什么它没有像您预期的那样工作(而且它不应该像您预期的那样工作)
在.Net MVC中,这种带有自定义错误页的内容有点混乱,但我建议您查看或自定义这些内容,以检查传出响应的状态,并在那里采取适当的操作。也许这个答案会有所帮助(但我碰巧知道,有一项针对这一问题的简洁开源解决方案的计划即将公开发布,我将在不久的将来继续关注这一点)