我试图返回另一个API的结果; 我尝试通过RestSharp来做,但以下代码似乎无法正常工作
[HttpGet]
public IHttpActionResult GetReports()
{
var request = new RestRequest("reports", Method.GET)
{
RequestFormat = DataFormat.Json
};
var response = _restClient.Execute<List<Report>> (request);
return Json(response.Data);
}
这会返回null
但是在response.Content上有一个我的json数据字符串
并且这可能不会返回404/500 / ...无论其他api trows何时不是200
注意:之所以需要1对1的原因; 这个api是外部可用的,但是我们无法访问外部api上的数据库,所以我们有一个内部api可以访问它们。所以外部api只是作为代理
更新
此代码按原样返回数据,但这将始终返回200,那么是否有自动方式返回StatusCode? p>
答案 0 :(得分:0)
我相信你只需要
return response.Data;
而不是
return response.Content;
答案 1 :(得分:0)
这会返回null但是在response.Content上有一个我的字符串 json数据
听起来你正在使用RestSharp并且遇到序列化问题,所以我在这里猜测...如果Content
有一些价值,但是Data
没有这通常是反序列化变坏的结果。
确保您的json可以反序列化为List<Report>
。
尝试手动反序列化:
var response = _restClient.Execute<List<Report>> (request);
List<Report> myList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Report>>(response.Content);
或
List<Report> myList = new JavaScriptSerializer().Deserialize<List<Report>>(response.Content);
如果myList
为null
,那么您的模型或json中都会出现问题。
否则,请检查this question,关于ContentType
。
var request = new RestRequest(Method.GET);
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };