web-dev-qa-db-ja.com

ASP.NET 5 / MVC 6で応答メッセージを作成してコンテンツ文字列を追加する方法

Web API 2では、これを使用して文字列コンテンツで応答を取得していました。

var response = Request.CreateResponse(HttpStatusCode.Ok);
response.Content = new StringContent("<my json result>", Encoding.UTF8, "application/json");

ObjectResultなどの組み込みクラスを使用せずに、ASP.NET 5/MVC 6で同じことをどのように実現できますか?

19
Sul Aga

Response.Bodyストリームに直接書き込み(Bodyは古いSystem.IO.Streamであるため)、コンテンツタイプを手動で設定できます。

public async Task ContentAction()
{
    var jsonString = "{\"foo\":1,\"bar\":false}";
    byte[] data = Encoding.UTF8.GetBytes(jsonString);
    Response.ContentType = "application/json";
    await Response.Body.WriteAsync(data, 0, data.Length);
}

Microsoft.AspNet.Httpからいくつかのユーティリティを使用すると、トラブルを回避できます。

  • 文字列の内容を応答本文に書き込むための拡張メソッド WriteAsync
  • MediaTypeHeaderValue コンテンツタイプヘッダーを指定するクラス。 (いくつかの検証を行い、charsetのような追加のパラメーターを追加するためのAPIを持っています)

したがって、同じアクションは次のようになります。

public async Task ContentAction()
{
    var jsonString = "{\"foo\":1,\"bar\":false}";
    Response.ContentType = new MediaTypeHeaderValue("application/json").ToString();
    await Response.WriteAsync(jsonString, Encoding.UTF8);
}

疑わしい場合は、 ContentResult および/または JsonResult の実装を常に確認できます。

31
Daniel J.G.