2016-04-06 13 views
3

jsonオブジェクトを返すWeb APIプロジェクトがあります。オブジェクトは正しく挿入されますが、呼び出し元のアプリケーションによってオブジェクトが受信されると空になります。私はこれがJsonがGETリクエストで拒否されたことと関係していると考えています。Web APIとGETリクエストでJsonを使用する

マイAPIコントローラのコードは次のようになります。この時点で

public IHttpActionResult GetThing(string id) 
    { 
     try 
     { 
      var model = new Thing(id); 
      var res = Json<Thing>(model); 
      return res; 
     } 
     catch 
     { 
      return NotFound(); 
     } 
    } 

"RES" が正しく入力されます。今、他の(クライアント)側で私が持っている:

internal static JsonResult GetThing(string thingId) 
    { 
     return GetTask<JsonResult>(string.Format(ThingUrl, thingId)); 
    } 

私はここにJsonObjectの値をチェックし、それが空の(データがnullである)が、私はまた、フィールド「JsonRequestBehavior」の値であることに気づきます私が疑う「DenyGet」は問題です。

私の質問は、この値を "AllowGet"に設定して、オブジェクトを使用できるのですか?私は残った小さな髪の毛を失っている!

+1

を見つけることができます;' OK(RES)を返す 'てみてください;' –

+0

は、あなたのモデルを確認してくださいDataContract属性とDataMember属性を持ちます。 – lcryder

+0

こんにちはKartikeya、私はOk(res)を使用してみましたが、結果は同じです、空のオブジェクトがクライアント側で受信されます。 – Faithypop

答えて

3

コントローラ内のオブジェクトをJSONに変換する必要はありません。アプリケーション/ JSONヘッダが設定されている、あなたは黄金する必要があります:あなたが要求を行うとき

public Thing Get(string id) 
{ 
    try 
    { 
     var model = new Thing(id);   
     return model; 
    } 
    catch 
    { 
     //throw not found exception 
    } 
} 

はその後、受け入れることを確認:あなたはこのようになり、あなたのコントローラのコードを持つことができるはずです。

EDIT:あなたのコメントに加えて、リクエストを実際に表示しないコードでは、APIエンドポイントを呼び出すために記述したコードが間違っている必要があります。

それは次のようになります。この上

using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("BaseUrlOfAPI"); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));  

    HttpResponseMessage response = await client.GetAsync("realtiveurltocontroller/thingid"); 
    if (response.IsSuccessStatusCode) 
    { 
     Thing thing = await response.Content.ReadAsAsync<Thing>(); 
     // Do whatever you want with thing. 
    } 
} 

詳しい情報は代わりに `リターン解像度のhere

+2

ちょっとDavid、あなたは正しく、JsonRequestBehaviorはMVCでしかあ​​りません。ヒントをありがとう! – DrewJordan

+0

私はこれをhttpClient.DefaultRequestHeaders.Add( "Accept"、 "application/json")を使って行っています。問題は残っています。 – Faithypop

+0

@Faithypop私はいくつかの追加情報と、あなたが見るためのさらなる例へのリンクを追加しました。 –

関連する問題