ASP。NET Core 2.0,从Web API(与MVC统一并使用相同的基类Controller)返回对象的理想方式是
public IActionResult Get()
{
return new OkObjectResult(new Item { Id = 123, Name = "Hero" });
}
请注意,
它返回200个OK状态码(这是ObjectResult的OK类型)
它进行内容协商,即它将根据请求中的Accept报头返回。如果在请求中发送Accept: application/xml,它将以xml的形式返回。如果不发送任何内容,则默认为JSON。
如果需要发送特定的状态代码,则使用ObjectResult或StatusCode。两者都做同样的事情,并支持内容协商。
return new ObjectResult(new Item { Id = 123, Name = "Hero" }) { StatusCode = 200 };
return StatusCode( 200, new Item { Id = 123, Name = "Hero" });
或者更细粒度的ObjectResult:
Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection myContentTypes = new Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection { System.Net.Mime.MediaTypeNames.Application.Json };
String hardCodedJson = "{\"Id\":\"123\",\"DateOfRegistration\":\"2012-10-21T00:00:00+05:30\",\"Status\":0}";
return new ObjectResult(hardCodedJson) { StatusCode = 200, ContentTypes = myContentTypes };
如果您特别希望以JSON形式返回,有几种方法
//GET http://example.com/api/test/asjson
[HttpGet("AsJson")]
public JsonResult GetAsJson()
{
return Json(new Item { Id = 123, Name = "Hero" });
}
//GET http://example.com/api/test/withproduces
[HttpGet("WithProduces")]
[Produces("application/json")]
public Item GetWithProduces()
{
return new Item { Id = 123, Name = "Hero" };
}
请注意,
两者都以两种不同的方式强制执行JSON。
两者都忽略了内容协商。
第一种方法使用特定的序列化器JSON (object)强制执行JSON。
第二种方法通过使用products()属性(这是一个ResultFilter)和contentType = application/json来实现同样的功能
在官方文档中阅读更多关于它们的信息。点击这里了解过滤器。
示例中使用的简单模型类
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
}