2016-12-07 6 views
0

私はバックエンドがWeb APIであるMVC 5アプリケーションがあります。私のサーバーへのリクエストごとに、私はvar UserAgent = Request.UserAgent.ToString();のようなコントローラアクションメソッドで取得できるユーザエージェントを提供する必要があります(コントローラ=>サービス=> HttpRequester => XXXHttpClientXXXHttpClientクラスでは、私は同じことを達成するためのよりよい方法があると思います。私はそれをgoogleにしようとしましたが、関連するものは何も見つかりませんでしたので、後で渡すのではなくXXXHttpClientクラスでuser-agentを直接取得したい場合、誰もがベストプラクティスを教えてくれます。mvc 5アプリケーションのユーザーエージェント

答えて

1

多くの可能な回答で幅広い質問が少しあります。

通常、すべてのレイヤーにデータを渡すのは良いことではありません。

私は、ユーザーエージェントをつかんでオブジェクトに設定するMVCアクションフィルターを作成します。オブジェクトクラスは次のようになります。

public class RequestContext 
{ 
    public string UserAgent { get; set; } 
} 

この要求ごとに1回注入するために依存性注入フレームワークを使用します。アクションフィルタとデータに依存するレイヤは同じインスタンスを使用し、必要なレイヤにデータを取得できます。

別の静的プロパティを使用していますオプション:

HttpContext.Current.Request.UserAgent 

グレーターパフォーマンス、読みやすく、より低いテスト容易:)

+0

一回あたりの要求は、アクションメソッドレベルで意味しますか? –

+0

はい、通常、DIフレームワークは「一時的な」スコープを提供します。これは、それを必要とするすべてのオブジェクトに対してインスタンスが作成され、単一のインスタンスが要求するすべてのオブジェクトによって共有されることを意味する「シングルトン」スコープと、単一のHTTP要求の一部として作成されたオブジェクトは、同じインスタンスを取得します。 Ninjectでは、これは 'InRequestScope()'です。 – juunas

+0

可能であれば、いくつかのコードまたは参照リンクをお勧めしますか? –

関連する問題