2016-09-26 10 views
0

私は別のAPIの結果を返そうとしています。 私はRestSharp経由でそれをやってみたが、次のコードは、Web Apiが他のエンドポイントの結果を返す

[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が何であっても、それは200ではありません。

注:これは1対1である必要がある理由です。 このapiは外部からアクセス可能ですが、外部API上のデータベースにアクセスすることはできません。そのため、アクセス可能な内部APIがあります。 StatusCodeを返すための自動化された方法があるので、そこで、外部APIだけでプロキシ

UPDATE

であるとして、このコードは、データを返すように動作しますが、これは常に200を返すのだろうか?私はあなただけ必要と考えてい

+2

何が問題なのですか? – smoksnes

+0

@smoksnes:良い点、情報を追加しました – Kiwi

+3

ブラウザのURLを参照すると、どのような応答が得られますか?ステータスコードは何ですか?認証が必要ですか?これまでに何をデバッグしましたか? –

答えて

0

return response.Data; 

なく

return response.Content; 
+0

'List '(これは 'response.Data')は' IHttpActionResult'に直接キャストすることができないので、これはほとんどうまくいかないでしょう。 – smoksnes

+0

そして、これはIHttpActionResultではなく動作しないが、私のresponse.dataはnullであることを確認できます – Kiwi

+0

はい、@smoksnesは正しいです - 私は自分の答えを編集する必要があります:) –

0

これはnullを返しますが、response.Contentに私 JSONデータの文字列がある

RestSharpを使用していると聞こえ、私はここで推測を捨てています...もしContentがいくつかの価値を持っていますが、Dataはしばしば逆直列化が悪くなった結果ではありませんでした。

jsonをデシリアライズしてList<Report>にすることができます。

はそれを手動でデシリアライズしてください:myListnullある場合

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

、何かが間違ってお使いのモデルのいずれかまたはJSONであります。

ContentTypeについては、this questionをチェックしてください。

var request = new RestRequest(Method.GET); 
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; }; 
関連する問題