C# 从RESTAPI检索响应
我正在创建一个调用其他第三方API的API。第三方API是REST API,当我在web浏览器中调用它时,它以JSON格式返回响应C# 从RESTAPI检索响应,c#,asp.net,json,api,asp.net-web-api,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
[{"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\"}]"
非常感谢您的帮助。创建一个模型来保存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[]>();
完整示例
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);
}
}
公共异步任务Get(字符串LabName){
使用(var client_EndPoint=new HttpClient()){
//…为简洁起见,删除了其他代码
var response_EndPoint=wait client_EndPoint.GetAsync(EndPoint_URL);
var models=wait response_EndPoint.Content.ReadAsAsync();
返回Ok(型号);
}
}
您可以使用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)
显示如何返回数据的整个传递方法。发生的情况是,当传递json字符串时,该字符串再次被序列化方法是
public IHttpActionResult Get(string LabName)
我尝试使用返回Ok(responseString)代码>即使返回类似于“[{\'Acc\':\'adm\',\'Cnt\':\'001\',\'Year\':\'16\'}]”的响应。
看看这里给出的答案,没有其他简单的方法可以做到这一点吗?。我得到了结果,但我不得不接受额外的“你也可以将RESTAPI结果反序列化到一个具体的类中,然后将其传递回去,然后将其重新序列化到适当的JSONTANKS NKosi中进行详细解释。但是现在的问题是返回看起来像[{“Acc”:null,“Cnt”:null,“Year”:“16”}]值为null,应该是[{“Acc”:“it”,“Cnt”:“023”,“Year”:“16”}]找到了问题。这是我的错。非常感谢。我无法删除Xml格式化程序,因为我还从返回XMLok的同一个api调用了其他api。所以只需添加json媒体格式化程序,不要删除xml。然后使用return json(),它表示当前contxet中不存在json,在return json(responseString)
json,而不是json(我编辑我的响应)。您添加了Newtonsoft.Json吗?
return Json(responseString)