【问题标题】:Web Api not binding to modelWeb Api 未绑定到模型
【发布时间】:2013-01-05 22:56:02
【问题描述】:

我正在尝试将 JSON 对象发布到 Web Api URL,但它没有绑定到模型。

这似乎是同一个问题:ASP.Net Web Api not binding model on POST

我尝试了他们所做的一切,但仍然无法正常工作。您可能注意到的一个区别是我没有使用 DataContract 属性,但我认为它们不是必需的,并且在我尝试它们时没有任何区别。

public class MyModel
{
    public int Id { get; set; }
}

Public class MyController : ApiController
{
    public int Save(MyModel myModel)
    {
        // myModel is always null
        return 0;
    }
 }

【问题讨论】:

  • 你的 web.api 路由是什么样子的?尝试在提琴手中指定接受标头。在请求头中添加这一行:Accept: "application/json"
  • 不,不,骰子。我试过带引号和不带引号
  • @nemesv 这实际上是不正确的,Accept: 用于获取时可接受的返回类型,而不是在使用 content-type 指定正文类型的帖子中

标签: c# json model-binding asp.net-web-api


【解决方案1】:

您的控制器方法中似乎缺少[HttpPost] 属性。 在上述情况下,这实际上并不是严格要求的,也许只有在发布原语时才需要?

另外,如果您使用 WebApi,我将使用更多基于 REST 的语法,例如在控制器上使用 Get、Post、Put 等方法,而不是命名方法

编辑:

您的帖子还有另一个非常微妙的问题。标题行不能以; 结尾,所以Content-Type: application/json; charset=utf-8; 应该是Content-Type: application/json; charset=utf-8

【讨论】:

  • 当我尝试通过 Get 请求它时,它说它不受支持。我假设它默认为 Post 因为它接受一个可能很大的对象。所有其他接口默认为 Get
  • @JoshRusso 我很确定你需要为 post 方法赋予属性,除非它们被命名为 Post
  • 我尝试在您的评论后将其命名为 Post,但它的行为仍然相同
  • @JoshRusso 会试一试,当我的 VS 升级时回复你
  • 我刚刚创建了一个新的示例 web api 项目,但它甚至不起作用。我想知道我的安装是否有问题
【解决方案2】:

这可能是编码问题。 我更改了编码,模型绑定成功。

client.Encoding = Encoding.UTF8;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-21
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多