2

コントローラー A が内部 HTTPGET メソッドを呼び出す MVC アプリがあります (コントローラー B によって処理されます)。Aにはビューがあり、Bにはありません。

コントローラー B の HTTPGET は次のようになります。

[HttpGet]
public String GetToken(string accessToken, string UID)  {
    ....
    // Log errors and other metrics
    return someToken;
}

エラー ログを記録する B コントローラーでアクション フィルターを使用したいと考えています。ロギング中に HTTP GET で渡されるパラメーターが必要です。ログに記録できるように、accessToken と UID をアクション フィルターに渡すにはどうすればよいですか。

私が探しているのは次のようなものです:コントローラーは次のようなものでなければなりません

[MyActionFilter]
[HttpGet]
public String GetToken(string accessToken, string UID)  {
        ....
        return someToken;
    }

一方、アクション フィルターはログを記録する必要があります

public class MyActionFilterAttribute : ActionFilterAttribute {
    public override void onActionExecuted(HttpActionExecutedContext actionExecutedContext) {
        // READ THE HTTP GET PARAMETERS AND DO THE LOGGING
    }
}
4

3 に答える 3

1

最善の方法は、他の回答で提案されているように QueryString とその他のアイテムをログに記録することですが、メソッドパラメーターのみにアクセスしたい場合は、以下に示すように実行できます。ActionParameters Dictionary はすべてのメソッドパラメーターを提供します。

public class MyActionFilterAttribute : ActionFilterAttribute {
    public override void OnActionExecuted
       (HttpActionExecutedContext filterContext) {
        foreach (KeyValuePair<string,object> item 
            in filterContext.ActionParameters)
        {
            //print item.Key
            //print item.Value
        }
    }
}
于 2013-08-27T17:34:51.947 に答える
-1

必要なパラメーターをコントローラーで公開し、パラメーターを として直接読み取ることで、これを解決しましたfilterContext.Controller.publicParam

ActionFilter は次のようになります -

public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var thisController = ((myController)filterContext.Controller);

        // public function in the controller that returns the required object
        RequiredParameters requiredParams = 
                                    thisController.getParametersForLogging( );

        // read the variables from requiredParams object and do the logging
    }
于 2013-08-23T05:23:27.460 に答える