使用 CORS 在 WebAPI 中将 text/plain 作为复杂对象发布
Posted
技术标签:
【中文标题】使用 CORS 在 WebAPI 中将 text/plain 作为复杂对象发布【英文标题】:Posting text/plain as a complex object in WebAPI with CORS 【发布时间】:2013-03-15 07:21:19 【问题描述】:所以我希望使用 CORS 从 AJAX 帖子中将复杂对象 POST(或 PUT)到服务器。不幸的是,IE8 只支持在使用 CORS 时发送 text/plain 而不是application/json
。
有没有办法在WebAPI
中实现一个处理程序来自定义解析文本/纯文本提交。
我的意思是复杂的对象
public void POST([FromBody] MyCustomObject myResponse)
return null;
通常我会在一些带有适当设置的标头的 JSON 中发布,但是由于 IE8 的限制,一旦您设置标头,它就会失败并拒绝访问,所以需要是文本/纯文本,所以我打算做的是发送一个 JSON 字符串,但称为 text/plain(我知道很难看!)但是因为没有更好的选择......
【问题讨论】:
【参考方案1】:如果您的 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 格式化程序接受纯文本内容类型,并删除 form 和 xml 格式化程序(尽管可能不需要删除它们)
【讨论】:
谢谢。这对我有用,我用它来防止在 POST、DELETE 和 PUT 时进行预检。【参考方案2】:很难看,但您可以尝试在消息处理程序中将内容类型标头从 text/plain 修改为 application/json,以便使用 json 格式化程序正确进行参数绑定。
【讨论】:
以上是关于使用 CORS 在 WebAPI 中将 text/plain 作为复杂对象发布的主要内容,如果未能解决你的问题,请参考以下文章
用于 XmlHttpRequest 的带有 WebAPI 的 CORS