我有一个web api,其中全局配置配置为使用:
XmlMediaTypeFormatter
XmlMediaTypeFormatter
我的问题是我不会使用新的控制器扩展这个web api,而是使用JsonMediaTypeFormatter.
是否可以仅为一个API控制器类将MediaTypeFormatter更改为JSON?
我的问题是没有返回JSON,我已经通过返回HttpResponseMessage来解释这个:
return new HttpResponseMessage { Content = new ObjectContent<string>("Hello world",new JsonMediaTypeFormatter()),StatusCode = HttpStatusCode.OK };
public class VMRegistrant { public int MerchantId { get; set; } public string Email { get; set; } }
我的控制器操作将VMRegistrant作为参数:
public HttpResponseMessage CreateRegistrant(VMRegistrant registrant) { // Save registrant in db... }
但问题是,当我用JSON调用该操作时,它失败了.
解决方法
您可以让控制器返回IHttpActionResult并使用扩展方法
HttpRequestMessageExtensions.CreateResponse<T>
并指定要使用的格式化程序:
public IHttpActionResult Foo() { var bar = new Bar { Message = "Hello" }; return Request.CreateResponse(HttpStatusCode.OK,bar,new MediaTypeHeaderValue("application/json")); }
另一种可能性是使用ApiController.Content
方法:
public IHttpActionResult Foo() { var bar = new Bar { Message = "Hello" }; return Content(HttpStatusCode.OK,new JsonMediaTypeFormatter(),new MediaTypeHeaderValue("application/json")); }
编辑:
一种可能性是通过读取tge流并使用JSON解析器(如Json.NET)从JSON创建对象,从Request对象中自行读取和反序列化内容:
public async Task<IHttpActionResult> FooAsync() { var json = await Request.Content.ReadAsstringAsync(); var content = JsonConvert.DeserializeObject<VMRegistrant>(json); }
原文地址:https://www.jb51.cc/csharp/99131.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。