7

因此,我希望使用 CORS 从 AJAX 帖子中将复杂对象 POST(或 PUT)到服务器。不幸的是,IE8 仅支持在使用 CORS 时发送 text/plain 而不是application/json.

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

我的意思是复杂的对象

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

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

4

2 回答 2

11

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

如何强制 asp.net webapi 始终将 POST 数据解码为 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 格式化程序(尽管可能不需要删除它们)

于 2013-03-25T19:16:31.100 回答
2

丑陋,但是您可以尝试在消息处理程序中将内容类型标头从 text/plain 修改为 application/json ,以便使用 json 格式化程序正确进行参数绑定。

于 2013-03-25T18:56:20.933 回答