2017-05-25 10 views
-1

私はそこにアプリケーションを持っていますが、私はすべての操作のためにWeb API呼び出しを使用しています。Web APIメソッドへのヒット数を取得する方法

API呼び出しを追跡する必要があり、APIが何回呼び出されたか、どのメソッドが何回呼び出されたかを意味する必要があります。将来の応答のためにデータベースに挿入する必要があるすべての情報。

誰でもどのように達成するか考えていますか?シェアしてください。私は思っています何

:私はURLをチェックし、APIのメソッド名を見つけようとしますapplication_beginrequest下のglobal.asaxで

その後、非同期呼び出しを行うことによってメソッド名をDBにプッシュできます。

注:
が、それはAPIのパフォーマンスが遅くなりますん?

+0

私は、 "trackdown"メソッド、クラス、何でも書いていると思います。それぞれのapiアクション内で使用してください。 –

+0

apiコードが既に変更されているため、以下のアプローチを試しました。私たちは何をしたのですか?グローバルアクションフィルタを作成しました。これらのアクションフィルタでは、APIメソッド呼び出しを追跡するコードを記述しました。 –

答えて

0

使用のActionFilter。ロギングであなたのコードを浪費したくありません。

public class MyLoggingFilter: ActionFilterAttribute 
{ 


    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     Log... 
     //actionContext.ActionDescriptor.ActionName 
     //actionContext.ControllerContext.ControllerDescriptor.ControllerName; 
    } 

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 
     Log... 
    } 
} 

次にあなたが次にlog4netのかNLogのようなロギングフレームワークを使用することを検討して、あなたのWebApiConfigに

public static void Register(HttpConfiguration config) 
{ 
     // Web API configuration and services 

     config.Filters.Add(new MyLoggingFilter()); 

    config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
} 

をすべてのコントローラのアクションフィルタを登録する必要があります - これらのフレームワークは、任意のストレージタイプにログを記録するようにアペンダを持つことになります( SQL、ファイルへ、何でも)。これらのフレームワークは非同期でログに記録されるため、要求の実行が遅くなることはありません。

+0

このアプローチを取って試しました、ありがとうございます –

関連する問題