gpt4 book ai didi

c# - 模型未绑定(bind)查询参数.Net Core 3.0 HTTP GET中的所有属性

转载 作者:行者123 更新时间:2023-12-04 10:57:22 25 4
gpt4 key购买 nike

我正在尝试通过查询参数绑定(bind)到一个复杂的对象,我似乎只绑定(bind)了第一个属性,其他所有内容都使用默认值(0、null、false 等)初始化。

HTTP 请求带有所有适用的属性名称和值。属性名称完全匹配。它绑定(bind)查询参数中的第一个属性,但不绑定(bind)其他属性。当请求进来时 & 被替换为 &amps; 。根据我在网上所做的研究,这些在模型绑定(bind)器的眼中应该是相同的。这是我目前的设置

public class MyComplexObject
{
public string Id { get; set; }
public int Level { get; set; }
public Enum MyEnum { get; set; }
}

[HttpGet]
public IActionResult MyAction( [FromQuery] MyComplexObject model)
{
// stuff done here. model.Id is set to the correct value, everything
// else is set to an initialized value based on type.

return View("view", model)
}

这是在 MVC .Net Core 3.0 Web 项目(不是 API)中。

当我调试操作并查看 this.Request.QueryString 它显示 "?Id=2100&Level=6&MyEnum=MyEnumValue" 因此正在传入值时,我无法将其绑定(bind)到其余属性,并且它正确绑定(bind)了查询字符串中的第一个属性( Id ) .

我能找到的所有资料都说这就是我应该如何通过 QueryParameters 设置复杂对象,但我找不到任何决定性的东西是否适用于 .Net Core 3.0,我读到的所有内容都适用于 .Net Core 2.2 及更早版本,以及用于 POST 和 WebApi 的。

这在.Net 3.0中可能吗?如果是这样,我做错了什么?还有其他方法可以做到这一点,我可以设置正确绑定(bind)的路由参数,但我会做一堆,我希望只传递我的模型并完成它而不是 url/{paramters1}/{parameter2}/...
编辑::

当我打开 chrome 调试器并单击网络标签时,调用看起来像这样。
{myurl}?Id=2100&Level=6&MyEnum=MyEnumValue 所以它匹配调试器中的请求。

编辑第 2 部分:

我通过客户端中的 jQuery .load({url}) 发出请求。我做了一个 var url = url.replace('%amp;', '&'); 破解,解决了我的一个问题,它正确地绑定(bind)了属性。

谢谢大家的帮助!

最佳答案

public class MyComplexObject
{
[FromQuery(Name = "Id")]
public string Id { get; set; }
[FromQuery(Name = "Level")]
public int Level { get; set; }
[FromQuery(Name = "MyEnum")]
public Enum MyEnum { get; set; }
}

关于c# - 模型未绑定(bind)查询参数.Net Core 3.0 HTTP GET中的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59092714/

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