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

在web api 2中,我们习惯这样做以获得字符串内容的响应:

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

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

您可以直接写入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类,用于指定内容类型标头。 (它做了一些validation,并有一个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); } 

如有疑问,您可以随时查看ContentResult和/或JsonResult