转换为泛型方法
convert to generic method
我有一个需要转换为通用方法的循环方法。我正在使用 .net core 2.0,我正在创建一组新的 API 调用远程 API。我将在我的 angular 前端使用生成的数据,并启用远程 API 不提供的身份验证和授权。循环代码类似于 ff:
[HttpGet("getAddressBook")]
public async Task<IActionResult> GetAddressBook()
{
string BaseURL = Configuration.GetSection("AppSettings:BaseURL").Value;
AddressBookRootObject AddressBookInfo = new AddressBookRootObject();
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(BaseURL);
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage Res = await client.GetAsync("/v1/addressBook_get");
if (Res.IsSuccessStatusCode)
{
var ParametersResponse = Res.Content.ReadAsStringAsync().Result;
AddressBookInfo = JsonConvert.DeserializeObject<AddressBookRootObject>(ParametersResponse);
}
else
{
return BadRequest("Error retrieving data from server");
}
return Ok(AddressBookInfo.data);
}
}
我对这段代码没有任何问题,它运行完美,但我需要将它转换为通用方法,因为我有大量使用上述代码的远程 API 调用。我检查了这个 link:
Converting Method to Generic Method?
但我不知道如何转换
AddressBookRootObject AddressBookInfo = new AddressBookRootObject();
通用的。非常感谢任何帮助。 TIA.
创建所需功能的简单 Web 服务抽象
public interface IHttpClient {
Task<T> GetAsync<T>(string uri);
}
通过在操作中封装常用功能的实现。
public class WebService: IHttpClient {
private readonly HttpClient client;
public WebService(IConfiguration configuration) {
string BaseURL = configuration.GetSection("AppSettings:BaseURL").Value;
client = new HttpClient();
client.BaseAddress = new Uri(BaseURL);
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
public async Task<T> GetAsync<T>(string url) {
var result = default(T);
var response = await client.GetAsync(url);
if (response.IsSuccessStatusCode) {
var json = await response.Content.ReadAsStringAsync();
result = JsonConvert.DeserializeObject<T>(json);
}
return result
}
}
控制器将注入服务并重构操作
private readonly IHttpClient client;
public AddressBookController(IHttpClient client) {
this.client = client;
}
[HttpGet("getAddressBook")]
public async Task<IActionResult> GetAddressBook() {
var AddressBookInfo = await client.GetAsync<AddressBookRootObject>("/v1/addressBook_get");
if (AddressBookInfo != null) {
return Ok(AddressBookInfo.data);
} else {
return BadRequest("Error retrieving data from atCom server");
}
}
可以根据需要更新抽象以包含更多常用功能。
最后确保抽象和实现已注册到服务器集合。
services.AddSingleton<IHttpClient, WebService>();
我有一个需要转换为通用方法的循环方法。我正在使用 .net core 2.0,我正在创建一组新的 API 调用远程 API。我将在我的 angular 前端使用生成的数据,并启用远程 API 不提供的身份验证和授权。循环代码类似于 ff:
[HttpGet("getAddressBook")]
public async Task<IActionResult> GetAddressBook()
{
string BaseURL = Configuration.GetSection("AppSettings:BaseURL").Value;
AddressBookRootObject AddressBookInfo = new AddressBookRootObject();
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(BaseURL);
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage Res = await client.GetAsync("/v1/addressBook_get");
if (Res.IsSuccessStatusCode)
{
var ParametersResponse = Res.Content.ReadAsStringAsync().Result;
AddressBookInfo = JsonConvert.DeserializeObject<AddressBookRootObject>(ParametersResponse);
}
else
{
return BadRequest("Error retrieving data from server");
}
return Ok(AddressBookInfo.data);
}
}
我对这段代码没有任何问题,它运行完美,但我需要将它转换为通用方法,因为我有大量使用上述代码的远程 API 调用。我检查了这个 link:
Converting Method to Generic Method?
但我不知道如何转换
AddressBookRootObject AddressBookInfo = new AddressBookRootObject();
通用的。非常感谢任何帮助。 TIA.
创建所需功能的简单 Web 服务抽象
public interface IHttpClient {
Task<T> GetAsync<T>(string uri);
}
通过在操作中封装常用功能的实现。
public class WebService: IHttpClient {
private readonly HttpClient client;
public WebService(IConfiguration configuration) {
string BaseURL = configuration.GetSection("AppSettings:BaseURL").Value;
client = new HttpClient();
client.BaseAddress = new Uri(BaseURL);
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
public async Task<T> GetAsync<T>(string url) {
var result = default(T);
var response = await client.GetAsync(url);
if (response.IsSuccessStatusCode) {
var json = await response.Content.ReadAsStringAsync();
result = JsonConvert.DeserializeObject<T>(json);
}
return result
}
}
控制器将注入服务并重构操作
private readonly IHttpClient client;
public AddressBookController(IHttpClient client) {
this.client = client;
}
[HttpGet("getAddressBook")]
public async Task<IActionResult> GetAddressBook() {
var AddressBookInfo = await client.GetAsync<AddressBookRootObject>("/v1/addressBook_get");
if (AddressBookInfo != null) {
return Ok(AddressBookInfo.data);
} else {
return BadRequest("Error retrieving data from atCom server");
}
}
可以根据需要更新抽象以包含更多常用功能。
最后确保抽象和实现已注册到服务器集合。
services.AddSingleton<IHttpClient, WebService>();