【问题标题】:Posting text/plain as a complex object in WebAPI with CORS使用 CORS 在 WebAPI 中将 text/plain 作为复杂对象发布
【发布时间】: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(我知道很难看!)但是因为没有更好的选择......

【问题讨论】:

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


    【解决方案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 格式化程序正确进行参数绑定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      相关资源
      最近更新 更多