0

有人可以为我澄清这种情况:

  1. 我们提出例如 Home\Index 的请求;
  2. 在 Global asax 我们有 Application_AuthorizeRequest
  3. Application_AuthorizeRequest 抛出异常
  4. 我们有 Application_Error 捕获它并返回新视图

    IController 控制器 = 新的 ErrorController(); //routedata 没问题 controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));

  5. 执行错误的操作(没关系)

  6. 但是 MVC 或 ASP 管道仍然尝试执行 Home\Index,我怎样才能让管道忘记请求?

据我了解 mvc 它是 HttpHandler,我如何确保我的错误操作是整个链中的最后一步?

4

1 回答 1

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");
    }
}

授权过滤器替换了Authenticate_RequestASP.NET MVC 应用程序中的方法,这就是您应该使用的。

然后使用此属性装饰您的 Index 操作:

public class HomeController: Controller
{
    [MyAuthorize]
    public ActionResult Index()
    {
        ...    
    }
}

现在您的 Application_Error 将被调用,错误控制器被执行并且 Index 操作从未​​触发,正如它应该的那样。

于 2013-01-11T11:52:02.933 回答