1

ビューがメモリにレンダリングされ、クライアントへの応答として送信される前に、呼び出しをインターセプトし、レンダリングされているビュー、アクションとコントローラーを確認し、ハウスキーピングを実行したいと思います。

したがって、私はメソッドを実装しResultFilterてオーバーライドしていますOnResultExecuted

このメソッド内で、ルートデータを取得して、どのビュー、アクション、コントローラーが呼び出されたかを把握するにはどうすればよいですか?

多大な謝罪を更新します。リフレクターでResultExecutedContextを検索したところ、Exception、Canceled、およびActionResultプロパティのみが表示されました。RouteDataは表示されませんでした。IDEを起動すると、ルートデータが表示されました。私はこの質問をするためのディックのように感じます。

4

2 に答える 2

3

filterContextRouteDataプロパティから取得できます。

public override void OnResultExecuted(ResultExecutedContext filterContext)
{
    RouteData rd = filterContext.RouteData;
    // read from the current request RouteData the information
    // you were looking for. For example to get the current controller
    // and action:
    string currentController = rd.GetRequiredString("controller");
    string currentAction = rd.GetRequiredString("action");
}

レンダリングされたビューに関する限り、Resultプロパティから次の情報を取得できます。

var viewResult = filterContext.Result as ViewResultBase;
if (viewResult != null)
{
    // the controller action returned a view result (either a ViewResult or PartialViewResult)
    // so we could retrieve the view name here:
    string viewName = viewResult.ViewName;
}

一方、コントローラーアクションがJsonResultを返した場合は、それを抽出して取得することもできます。

var jsonResult = filterContext.Result as JsonResult;

等々...

于 2013-02-05T09:33:46.647 に答える
1

ResultExecutedContextRouteDataあなたが必要なものをあなたに与えるべきである特性を持っています

于 2013-02-05T09:34:11.320 に答える