我在MVC应用程序的Global.asax.cs文件中有以下代码,它捕获500和404错误并调用我的ErrorsController,它根据代码返回我的自定义错误页面。这很好用。但是这段代码也应该捕获403错误(未经授权),这样我的控制器也会显示正确的视图。但是当我运行它时,我得到一个IIS页面,说明未经授权的消息。如何让我的代码调用我的ErrorsController,接收403代码,并显示我的自定义视图?
我测试它的方式是我在我的一个动作上放置了[Authorize]属性并调用了该动作。我应该收到403错误,并且应该显示我的自定义错误页面。
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();
}
答案 0 :(得分:0)
当您使用Authorize属性时,授权失败时不会触发应用程序错误,它只会返回HttpResponseMessage。这就是它没有按预期工作的原因(并且它不应该像你期望的那样工作)。
这个带有自定义错误页面的内容在.Net MVC中有点乱,但我建议您查看HttpErrors或制作自己的自定义HttpModule来检查传出响应的状态并采取在那里采取适当的行动。