使用CORS在Web API中将text / plain作为复杂对象发布

时间:2013-03-25 17:30:34

标签: asp.net-mvc asp.net-web-api cors

所以我希望使用CORS从AJAX帖子向服务器POST(或PUT)一个复杂的对象。不幸的是,IE8仅支持在使用CORS而不是application/json时发送text / plain。

有没有办法在WebAPI中实现自定义解析文本/普通提交的处理程序。

复杂的对象我的意思是

public void POST([FromBody] MyCustomObject myResponse)
{
   return null;
}

通常情况下,我会发布一些JSON并设置适当的标头,但是由于IE8限制,一旦设置了标头,它就会失败并且访问被拒绝所以需要是text / plain所以我打算做的就是发送一个JSON字符串,但称为text / plain(丑陋,我知道!),但缺乏更好的选择......

2 个答案:

答案 0 :(得分:9)

如果您的WebApi应用程序确实只使用JSON,那么您可以使用此解决方案,它始终以JSON响应并忽略请求内容类型:

How can I force asp.net webapi to always decode POST data as JSON

由此,我建议这个解决方案:

此代码需要添加到Application_Start或WebApiConfig.Register

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter);
config.Formatters.Remove(config.Formatters.XmlFormatter);

它告诉json格式化程序接受纯文本内容类型,并删除表单和xml格式化程序(尽管可能不需要删除它们)

答案 1 :(得分:2)

很难看,但您可以尝试在消息处理程序中将text-plain中的content-type标头修改为application / json,以便使用json格式化程序正确地进行参数绑定。