Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换为泛型方法_C#_.net Core 2.0 - Fatal编程技术网

C# 转换为泛型方法

C# 转换为泛型方法,c#,.net-core-2.0,C#,.net Core 2.0,我有一个需要转换为泛型方法的循环方法。我正在使用.NETCore2.0,我正在创建一组调用远程API的新API。我将在我的angular前端中使用生成的数据,并启用远程API不提供的身份验证和授权。循环代码与ff类似: [HttpGet("getAddressBook")] public async Task<IActionResult> GetAddressBook() { string BaseURL = Configuration.GetSection("AppSett

我有一个需要转换为泛型方法的循环方法。我正在使用.NETCore2.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);
    }       
}

一个普通的。非常感谢您的帮助。TIA。

创建所需功能的简单web服务抽象

public interface IHttpClient {
    Task<T> GetAsync<T>(string uri);
}
公共接口IHttpClient{
任务GetAsync(字符串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         
    }
}
公共类Web服务:IHttpClient{
私有只读HttpClient;
公共Web服务(IConfiguration配置){
字符串BaseURL=configuration.GetSection(“AppSettings:BaseURL”).Value;
client=新的HttpClient();
client.BaseAddress=新Uri(BaseURL);
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
}
公共异步任务GetAsync(字符串url){
var结果=默认值(T);
var response=wait client.GetAsync(url);
if(响应。IsSuccessStatusCode){
var json=await response.Content.ReadAsStringAsync();
结果=JsonConvert.DeserializeObject(json);
}
返回结果
}
}
控制器将注入服务并重构动作

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");
    }
}
专用只读IHttpClient客户端;
公共地址簿控制器(IHttpClient客户端){
this.client=client;
}
[HttpGet(“getAddressBook”)]
公共异步任务GetAddressBook(){
var AddressBookInfo=await client.GetAsync(“/v1/addressBook_-get”);
如果(AddressBookInfo!=null){
返回Ok(AddressBookInfo.data);
}否则{
返回BadRequest(“从atCom服务器检索数据时出错”);
}
}
可以根据需要对抽象进行更新,以包含更多的通用功能

最后,确保抽象和实现已注册到服务器集合

services.AddSingleton<IHttpClient, WebService>();
services.AddSingleton();

AddressBookRootObject
将是您的通用方法中的
T
参数非常感谢,它就像一个魅力…我将用其他api调用测试它。。。
services.AddSingleton<IHttpClient, WebService>();