2

ControllerName と Action が解決された後、ただし要求が処理される前、つまり適切なアクションに到達する前に、MVC アプリに着信するすべての要求をインターセプトしたいと考えています。

私はこれを行う2つの方法を考えました:

1)HttpModuleすべての着信をインターセプトするために を記述し、 (またはそのような) プロパティをHttpRequest読み取り、構成したルートが決して変更されないことを想定できます(これは、回避したい、またはこの方法で行ったであろう仮定です) 、呼び出されているコントローラーとアクションの名前を推測します。HttpContext.Request.AbsoluteUrl

しかし、私はより信頼できる方法を探しています。したがって、以下の(2)。

2)MVCは、適切なコントローラーをインスタンス化する前に、一度または別の時点ですでにこれを行っていると思います。どこでそれを行うのか知りたいので、その作業を再利用できるかもしれません。どの時点でこの情報を取得し、リクエストを傍受し、アクションに到達する前に何かを行うことができますか?

4

1 に答える 1

2

global action filterコントローラーとアクションにアクセスできる場所を作成できます。

public class MyGlobalActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string controller = filterContext.RouteData.GetRequiredString("controller");
        string action = filterContext.RouteData.GetRequiredString("action");
        // do something with those variables ...
    }
}

このOnActionExecutingメソッドは、すべてのコントローラー アクションが実行される前に呼び出され、探している情報を RouteData から取得できます。

次に、グローバル アクション フィルターを次のように登録しますApplication_Start

GlobalFilters.Filters.Add(new MyGlobalActionFilter());
于 2013-01-30T10:47:59.400 に答える