2016-05-03 10 views
0

ログレスポンスを作成したいのですが、結果を取得できません。 LogResponseファイルにヒットできません。コード属性ファイルにヒットできません

私はファイル

public class LogResponse : ActionFilterAttribute 

{ 
    public LogResponse() 
    { 

    } 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     Log("OnActionExecuting", filterContext.RouteData); 
     Debug.WriteLine("TEST "); 
    } 

    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     Log("OnActionExecuted", filterContext.RouteData); 
    } 

    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     Log("OnResultExecuting", filterContext.RouteData); 
    } 

    public override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     Log("OnResultExecuted", filterContext.RouteData); 
    } 

    private void Log(string methodName, RouteData routeData) 
    { 
     var controllerName = routeData.Values["controller"]; 
     var actionName = routeData.Values["action"]; 
     var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName); 
     System.IO.StreamWriter file = new System.IO.StreamWriter(@"F:\\test.txt"); 
     file.WriteLine(message); 
     file.Close(); 
    } 
} 

さて、私は次のようにホームコントローラを持っています:私は、デバッグポイントを維持する場合、私はそれがIndexメソッドを打つ見ることができ、

ここ
[System.Web.Http.AllowAnonymous] 
[LogResponse] 
public class HomeController : ApiController 
{  
    [System.Web.Http.HttpGet] 

    public string Index() 
    { 
     return "Test API"; 
    } 
} 

、それをログレスポンス方式には当てられません。

私はこれを初めて使用しています。 私もルートを追加しました。そしてURLには、API/Home/Indexでヒットしました。

誰かが私のログ応答ファイルに当たっていない理由を教えてもらえますか?

+0

あなたが試すかもしれない最初の事はにクラス名を変更することですLogResponseAttribute。名前の属性接尾辞はC#の魔法のビットです。 –

+0

[このチュートリアル](http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs)を使用していますか?私は個人的にActionFiltersAttributeを使用していませんが、私が気付いたのは、あなたのメソッドタイプがActionResultとは対照的に文字列であることです。 – Arman

+0

MVCやWebAPIで継承する必要があるかどうかによって、 'ActionFilterAttribute' MVCのための2つの異なる名前空間 'System.Web.Mvc'とAPIのための' System.Net.Http'のクラスから考えています。 – Luiso

答えて

0

あなたはあなたの右のフィルターを使用していることを確認したWeb API 2を使用している:

"Filters for Web API are not the same as filters for MVC. The Web API filters are found in the System.Web.Http.Filters namespace."

And to register the filter

public static void RegisterWebApiFilters(System.Web.Http.Filters.HttpFilterCollection filters) 
{ 
    filters.Add(new LogRequest()); 
} 

protected void Application_Start() 
{ 
    RegisterWebApiFilters(GlobalConfiguration.Configuration.Filters); 
} 
+0

私はこのように 'kernel.Bind ();'を追加しました。 –

+0

これは、Ninjectですよね?これでコンテナに追加されました。 Web APIにフィルターとして使用されません。上記のようにWeb APIに登録する必要があります。 –

+0

LogResponseAttribute.csでは、 'system.web.mvc'を使用しています。他のものを使用している場合は、メソッドをオーバーライドできません。 –

関連する問題