从Rest API检索响应

时间:2016-12-23 16:05:21

标签: c# asp.net json api asp.net-web-api

我正在创建一个调用其他第三方API的API。第三方API是REST API,当我在Web浏览器中调用它时,它以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\"}]"

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

创建一个模型来保存rest 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);
    }
}

答案 1 :(得分:1)

你可以使用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)