繁体   English   中英

从Rest API检索响应

[英]Retrieving the response from Rest API

我正在创建一个调用其他第三方API的API。 第三方API是REST API,当我在网络浏览器中调用它时,会以JSON格式返回响应

[{"Acc":"IT","Cnt":"023","Year":"16"}]

当我从我的API调用第三方API时,我试图获得相同的响应。

public IHttpActionResult Get(string acctID) 
{
    using (var client_EndPoint= new HttpClient())
    {
        Uri uri_EndPoint = new Uri(BaseURL_EndPoint);
        client_EndPoint.BaseAddress = uri;
        client_EndPoint.DefaultRequestHeaders.Accept.Clear();
        client_EndPoint.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        string EndPoint_URL = BaseURL_EndPoint+"api/NameCreation?Account="+acctID;
        var response_EndPoint = client_EndPoint.GetAsync(EndPoint_URL).Result;
        string responseString = response_EndPoint.Content.ReadAsStringAsync().Result;
        return Ok(responseString);
    }
}

我一直在做的事情是通过字符串从第三方API获取响应。 但是我正在检查是否有一种方法可以获取JSON格式,以便可以直接返回它们。 get方法的返回类型为IHttpActionResult 如果我以字符串形式返回,则响应如下所示

"[{\"Acc\":\"adm\",\"Cnt\":\"001\",\"Year\":\"16\"}]"

任何帮助是极大的赞赏。

创建一个模型来保存其余api数据

public class Model {
    public string Acc { get; set; }
    public string Cnt { get; set; }
    public string Year { get; set; }
}

从api反序列化

var response_EndPoint = await client_EndPoint.GetAsync(EndPoint_URL);
var models = await response_EndPoint.Content.ReadAsAsync<Model[]>();

然后返回

return Ok(models);

完整的例子

public async Task<IHttpActionResult> Get(string LabName) {

    using (var client_EndPoint = new HttpClient()) {

        //...other code removed for brevity

        var response_EndPoint = await client_EndPoint.GetAsync(EndPoint_URL);
        var models = await response_EndPoint.Content.ReadAsAsync<Model[]>();
        return Ok(models);
    }
}

您可以使用Newtonsoft.Json,只需从nuget中添加它,并将此配置添加到webapiconfig中:

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling =     
Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);

然后使用

return Json(responseString)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM