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. エラーのあるアクションが実行されます (OK)

  6. しかし、MVC または ASP パイプラインは引き続き Home\Index を実行しようとします。パイプラインにリクエストを忘れさせるにはどうすればよいですか?

私が理解している限り、mvc は HttpHandler ですが、エラーのあるアクションがこのチェーン全体の最後のステップであることを確認するにはどうすればよいですか?

4

1 に答える 1

1

この設定には問題があります。Index アクションが呼び出されないようにしたい場合は、Authenticate_Requestイベントを使用する代わりに、カスタムの Authorize 属性を記述する必要があります。

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_Request、ASP.NET MVC アプリケーションのメソッドを置き換えるものであり、それを使用する必要があります。

次に、この属性で Index アクションを装飾します。

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

これで、Application_Error が呼び出され、エラー コントローラーが実行され、Index アクションがトリガーされることはありません。

于 2013-01-11T11:52:02.933 に答える