APIサイト(WebApi)を使用するXコントローラがあります。私はApiHelperクラスを作成しました。私はこれらのコントローラで使用します。今私の質問はこれです。このApiHelperを静的クラスにすることはできますか?私は、httpClientがインスタンス化されているため、できると思います。または、私は何かを見落としていますか?インスタンス化されたApiHelperである必要がありますか? (静的な使用は時折私を混乱させる)。以下のコード例。UIからのWebApi呼び出しにスタティックヘルパークラスを使用できますか?
public class HomeController : Controller
{
public async Task<string> VersionDemo()
{
var response = await ApiHelper.Call("/api/config/version");
var data = response.Content.ReadAsStringAsync();
var res = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(data.Result);
return res;
}
}
public class ConfigController : Controller
{
private async Task<List<ConfigSetting>> GetGeneralConfigurationDemo()
{
var generalConfiguration = new List<ConfigSetting>();
var response = await ApiHelper.Call("api/configuration/GetGeneralConfiguration");
var data = response.Content.ReadAsStringAsync();
generalConfiguration = JsonConvert.DeserializeObject<List<ConfigSetting>>(data.Result);
return generalConfiguration;
}
}
public static class ApiHelper
{
public static async Task<HttpResponseMessage> Call(string url)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var baseAdress = System.Configuration.ConfigurationManager.AppSettings["ApiBaseAddress"];
string apiUrl = baseAdress + url;
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(apiUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync(apiUrl);
return response;
}
}
}
はい、できます、そして実際にあなたの代わりに、それぞれの用途にそれを配置するのHttpClientインスタンスを再使用する必要があります。私はこれがIDisposableについて知っているすべてに反していることを知っていますが、[HttpClientは特別です。](https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/) – Crowcoder
あなたのアプローチには技術的に問題はありませんが、それは正常に動作します。しかし、単体テストについて気にしているのであれば、いくつかの困難に遭遇します。 – Dan
Crowcoderと、非常に興味深いHttpClientの投稿に感謝します。いくつかの改善に取り組んでいます。 – ivw