gpt4 book ai didi

c# - ASP.Net Web API 模型构造函数绑定(bind) - 调用了错误的构造函数

转载 作者:行者123 更新时间:2023-11-30 14:59:25 25 4
gpt4 key购买 nike

我在一个没有变化的 MVC4 Web API 项目中有一个简单的 ASP.Net Web API Controller ,它有一个采用 Values 类的 POST 方法。当我做一个:

POST/api/values 正文为 { name: "somename"}

调用 Values() 构造函数而不是 Values(string name) 构造函数。通常,这不是问题,因为 Name 属性会有一个公共(public)集,Web API 会在构造后调用它。在本例中,它是私有(private)的,所以我得到了一个默认的 Values 实例。

如果我删除 Values(int) 构造函数,那么它会调用 Values(string) 构造函数。

ModelBinding 没有选择带有 name 参数的 ctor 是有原因的吗?

示例代码如下:

using System.Web.Http;

namespace WebAPIPlayground.Controllers
{
public class ValuesController : ApiController
{
public void Post(Values value)
{
var a = value.ID; // == 0
var b = value.Name; // == null
}
}

public class Values
{
public int ID { get; private set; }
public string Name { get; private set; }

private Values() { }
public Values(int id) { ID = id; }
public Values(string name) { Name = name; }
}
}

我已经看过:Routing and Action SelectionWebAPI Parameter binding under the hood在许多其他网站中,但我不理解这种行为。

最佳答案

你在这里谈论的是反序列化,而不是模型绑定(bind)。尝试将此属性添加到您想要使用的构造函数中:

[JsonConstructor]
public Values(string name)

这应该适用于 Json.NET 的情况,但它不适用于 XML。也许这就是您所关心的。

关于c# - ASP.Net Web API 模型构造函数绑定(bind) - 调用了错误的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16824697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com