如何在ASP.NET 5/MVC 6中创建响应消息并向其添加内容字符串

Sul*_*Aga 21 c# httpresponse asp.net-web-api

在web api 2中,我们习惯于使用字符串内容来获取响应:

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

如何在不使用像ObjectResult这样的内置类的情况下在ASP.NET 5/MVC 6中实现相同的功能?

Dan*_*.G. 34

您可以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);
}
Run Code Online (Sandbox Code Playgroud)

使用以下的一些实用工具可以省去一些麻烦Microsoft.AspNet.Http:

  • WriteAsync用于将字符串内容写入响应主体的扩展方法.
  • MediaTypeHeaderValue类用于指定内容类型的报头.(它做了一些验证,并有一个API来添加像charset这样的额外参数)

所以同样的动作看起来像:

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

如有疑问,您可以随时查看ContentResult和/或的实施情况JsonResult.