2013-06-13 9 views
66

場合によっては、私はNewtonSoft JSON.NETを持っています。私のコントローラには私のコントローラからJobjectを返すだけです。Asp.net WEBAPIからJSON文字列を明示的に返しますか?

しかし、私は別のサービスからraw JSONを取得し、WebAPIから返す必要がある場合があります。この文脈では、私はNewtonSOftを使うことはできませんが、できれば文字列からJOBJECTを作成し、不要な処理オーバーヘッドのように見えます。

しかし、私はこれを単純に返したいと思いますが、文字列を返すと、クライアントはJSONラッパーを自分のコンテキストとともにエンコードされた文字列として受け取ります。

WebAPIコントローラメソッドからJSONを明示的に返すにはどうすればよいですか?

答えて

162

いくつかの選択肢があります。最も簡単な1は、以下のコードのようなもの、あなたの方法はHttpResponseMessageを返す必要があり、そして、あなたの文字列に基づいてStringContentとその応答を作成することです:

public HttpResponseMessage Get() 
{ 
    string yourJson = GetJsonFromSomewhere(); 
    var response = this.Request.CreateResponse(HttpStatusCode.OK); 
    response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json"); 
    return response; 
} 

そしてチェックnullまたは空のJSON文字列を

public HttpResponseMessage Get() 
{ 
    string yourJson = GetJsonFromSomewhere(); 
    if (!string.IsNullOrEmpty(yourJson)) 
    { 
     var response = this.Request.CreateResponse(HttpStatusCode.OK); 
     response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json"); 
     return response; 
    } 
    throw new HttpResponseException(HttpStatusCode.NotFound); 
} 
+0

素敵!ありがとうcarlos! :) – ManJan

+4

優れています。 – dumbledad

+0

これは厄介なことですが、実際には 'HttpResponseMessageレスポンス'を作成してから 'StringContent'を指定しなければなりません。 '.Content'プロパティ。コンストラクタにStringContentを代入すると動作しません。 – Suamere

2

WebAPI機能(XMLを許可するなど)を使用せずにJSONのみを返す場合は、いつでも直接出力に書き込むことができます。 ASP.NETでこれをホストしていると仮定すると、Responseオブジェクトにアクセスできるので、文字列として書くことができます。そして、あなたのメソッドから何も返す必要はありません。すでに書いてあります出力ストリームへの応答テキスト

関連する問題