Web Api返回其他端点的结果

时间:2016-09-26 13:34:52

标签: c# restsharp

我试图返回另一个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?

2 个答案:

答案 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);

如果myListnull,那么您的模型或json中都会出现问题。

否则,请检查this question,关于ContentType

var request = new RestRequest(Method.GET);
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };