有人可以为我澄清这种情况:
我们有Application_Error捕获它并返回新视图
IController controller = new ErrorController(); // routedata没问题 controller.Execute(new RequestContext(new HttpContextWrapper(Context),routeData));
执行错误操作(没关系)
据我所知,mvc是HttpHandler,我怎样才能确保我的错误操作是所有链中的最后一步?
答案 0 :(得分:1)
此设置存在问题。如果要阻止调用Index操作,则应编写自定义Authorize属性,而不是使用Authenticate_Request
事件:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// perform the logic you were doing in your Authenticate_Request
// here to authorize the user. You could throw exceptions as well
throw new Exception("ok");
}
}
授权过滤器替换了ASP.NET MVC应用程序中的Authenticate_Request
方法,这就是您应该使用的方法。
然后使用此属性修饰您的Index操作:
public class HomeController: Controller
{
[MyAuthorize]
public ActionResult Index()
{
...
}
}
现在,您的Application_Error将被调用,错误控制器将被执行,而索引操作永远不会被触发,完全应该如此。