Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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# 从RESTAPI检索响应_C#_Asp.net_Json_Api_Asp.net Web Api - Fatal编程技术网

C# 从RESTAPI检索响应

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

我正在创建一个调用其他第三方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\"}]"

非常感谢您的帮助。

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