gpt4 book ai didi

c# - .NET Web API 模型绑定(bind)前缀属性

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:30 24 4
gpt4 key购买 nike

我有一个 View 模型和类似的模型

public class SupplierViewModel
{
public Supplier Supplier { get; set; }
//Select Lists and other non model properties
}

还有两个模型

public class Supplier
{
public string Name { get; set; }
public Contact PrimaryContact { get; set; }
public List<Contact> SecondaryContacts { get; set; }
}

public class Contact
{
public string Name { get; set; }
}

但在我看来,字段的前缀是类名,所以当我将它发送到 Web API Controller 时,它的格式如下

{
Supplier.Name: "test",
Supplier.PrimaryContact.Name: "test",
Supplier.SecondaryContacts: [
{ Name: "test" }
]
}

当我将它发送到我的 Controller 时

[System.Web.Http.Route("Suppliers/{idSupplier?}")]
public HttpResponseMessage SuppliersAddOrEdit(Supplier Supplier, int idSupplier = 0)

它显然不会因为前缀而反序列化,目前我正在重新格式化它,然后再发送这样的请求

{
Name: "test",
PrimaryContact: {Name: "test"},
SecondaryContacts: [
{
Name: "test"
}
]
}

然后它就可以绑定(bind)了,但是我很确定当我向 ActionController 发送数据时它知道即使没有指定 Bind[(Prefix)] 例如

PrimaryContact.Name: "test"

将进入 PrimaryContact 类。如何在 Web API Controller 中获得相同的结果?

编辑:根据 Jon Susiak 的回答,我想进一步澄清

如果我改为使用 Controller 而不是 ApiController 我的模型,因为它会很好地绑定(bind)以 JSON 格式发送带有前缀的数据,有没有办法在 ApiController 中实现同样的事情?

最佳答案

在您看来,您最初发送的是 SupplierViewModel,但是在表单的 POST 中您期望的是 Supplier 对象。

您可以执行以下两项操作之一:

a) 将 POST 模型更改为 SupplierViewModel

b) 将初始模型更改为 Supplier 并将其他属性和列表放入 ViewBag

关于c# - .NET Web API 模型绑定(bind)前缀属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45977712/

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