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で同じことをどのように実現できますか?
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
の実装を常に確認できます。