我正在创建一个调用其他第三方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\"}]"
非常感谢任何帮助。
答案 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)