1. ホーム
  2. asp.net-mvc

[解決済み] Asp.net WEBAPIから明示的にJSON文字列を返しますか?

2023-01-13 04:04:17

質問

NewtonSoft JSON.NETを使用していて、コントローラからJobjectを返すだけで、うまくいく場合があります。

しかし、他のサービスから生のJSONを取得し、それを自分のWebAPIから返す必要がある場合があります。このコンテキストでは、NewtonSOFTを使用することはできませんが、もしできたとしたら、文字列からJOBJECTを作成し(これは不要な処理オーバーヘッドに思えます)、それを返せば、世界はすべてうまくいくでしょう。

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

WebAPIコントローラメソッドから明示的にJSONを返すにはどうしたらよいでしょうか。

どのように解決するのですか?

いくつかの方法があります。最も単純なものは、メソッドが 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);
}