私はMVC5プロジェクトを持っています。コントローラからwebapiメソッドを呼び出す必要があります。 WebAPIはトークンベースの認証で実装されています。つまり、各呼び出しごとにトークンを渡す必要があります。私はhttpheaderでトークンを渡すために以下のコードを使用しています。私は、単一のHTTPClientを使用すると、ヘッダーではなく、それぞれのヘッダとすべてのアクションメソッドを追加して、一つの場所に追加する必要があり、同じようmvcコントローラからwebapiを呼び出し、同じhttpclientを使用します。
HttpClient httpClient = new HttpClient();
string baseUrl = "http://localhost:60477/";
dynamic token = Session["token"];
if (token.AccessToken != null)
{
httpClient.DefaultRequestHeaders.Add("Authorization", String.Format("Bearer {0}", token.AccessToken));
}
私は私のコントローラで複数のアクションメソッドを持っています。どこで私はすべてのコントローラに共通のmvc applictaionにhttpclientヘッダー登録コードを置くことができます。つまり、それぞれのアクションメソッドにトークンを追加するようなコードを繰り返す必要はありません。どのようにすればいいのですか?
Public ActionResult Postuser(UserModel user)
{
//post code
}
Public ActionResult getuser(UserModel user)
{
HttpResponseMessage response = httpClient.GetAsync(baseUrl + "api/Admin/GetStates").Result;
if (response.IsSuccessStatusCode)
{
string stateInfo = response.Content.ReadAsStringAsync().Result;
}
}
Public ActionResult PostRoles(RoleModel role)
{
//post roles code
}
トークンベースのコードをそこに置くにはどうすればいいですか? – SivaRajini
編集を私の投稿にしてください。また、Ilya Chernomordikが提案したサービスを注入することは理想的であり、Dannyはヘルパーメソッドを使用することを提案しています。私の提案は最高ではないかもしれませんが、アクションフィルタをエクスポージャーにしたい場合は試してみてください。メソッドに追加されたHttpClientパラメータは、OnActionExecutingオーバーライドメソッドのコードをサービスオブジェクトに移動して注入するサービスオブジェクトにリファクタリングできます。希望が助けてくれる!ありがとうございます。 – alphaneer