【问题标题】:How can I force asp.net webapi to always decode POST data as JSON如何强制 asp.net webapi 始终将 POST 数据解码为 JSON
【发布时间】:2012-09-05 07:50:47
【问题描述】:

我正在将一些 json 数据发布到我的 asp.net webapi,但 post 参数始终为 null - 数据未正确序列化。该方法如下所示:

public HttpResponseMessage Post(string id, RegistrationData registerData)

似乎问题在于客户端(我无法控制)总是将内容类型发送为x-www-form-urlencoded,即使内容实际上是 json。这会导致 mvc 尝试将其反序列化为表单数据,但失败了。

有没有办法让 webapi 始终反序列化为 json,并忽略 content-type 标头?

【问题讨论】:

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


    【解决方案1】:

    我在这里找到了答案:http://blog.cdeutsch.com/2012/08/force-content-types-to-json-in-net.html

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

    foreach (var mediaType in config.Formatters.FormUrlEncodedFormatter.SupportedMediaTypes) 
    {
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(mediaType);
    }
    
    config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter);
    config.Formatters.Remove(config.Formatters.XmlFormatter);
    

    它告诉 json 格式化器接受每种类型,并删除 form 和 xml 格式化器

    【讨论】:

      【解决方案2】:

      我建议宁可修改传入请求的内容类型,比如在消息处理程序中修改为适当的内容类型,而不是从配置中删除格式化程序

      【讨论】:

      • 是否可以在处理请求之前应用这样的过滤器?我知道如何在普通 mvc 中执行此操作,但在 webapi 中不知道
      • @NathanReed 我正在尝试在普通 MVC 中执行此操作 :) 你会怎么做?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2019-09-30
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      相关资源
      最近更新 更多