您可以让您的控制器返回IHttpActionResult
并使用扩展方法HttpRequestMessageExtensions.CreateResponse<T> https://msdn.microsoft.com/en-us/library/hh969014(v=vs.118).aspx并指定您要使用的格式化程序:
public IHttpActionResult Foo()
{
var bar = new Bar { Message = "Hello" };
return Request.CreateResponse(HttpStatusCode.OK, bar, new MediaTypeHeaderValue("application/json"));
}
另一种可能性是使用ApiController.Content https://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.content(v=vs.118).aspx#M:System.Web.Http.ApiController.Content<code>1(System.Net.HttpStatusCode,</code>0,System.Net.Http.Formatting.MediaTypeFormatter,System.Net.Http.Headers.MediaTypeHeaderValue) method:
public IHttpActionResult Foo()
{
var bar = new Bar { Message = "Hello" };
return Content(HttpStatusCode.OK, bar, new JsonMediaTypeFormatter(), new MediaTypeHeaderValue("application/json"));
}
Edit:
一种可能性是自己阅读并反序列化内容Request
通过从流中读取对象并使用 JSON 解析器(例如 Json.NET)从 JSON 创建对象:
public async Task<IHttpActionResult> FooAsync()
{
var json = await Request.Content.ReadAsStringAsync();
var content = JsonConvert.DeserializeObject<VMRegistrant>(json);
}