gpt4 book ai didi

c# - 如何在 .NET Core 2.1 中重现复杂参数的 [FromUri] 行为

转载 作者:行者123 更新时间:2023-11-30 12:20:31 26 4
gpt4 key购买 nike

我目前正在创建一个新的 API,但我需要通过 URL 接收复杂的参数。我无法在不冒其他系统出错的风险的情况下轻松更改这些参数。

我正在使用 .Net Core 2.1,由于 [FromUri] 不存在,我不得不使用 [FromQuery]。问题是它不会填充复杂的参数。我知道这不是 .NET Core 的基本功能,但四处搜索我找到了解决方案,但似乎都没有用。我尝试了一个干净的项目并遇到了同样的问题。

示例网址:https://localhost:44337/api/values?simple=true&foo[0][value]=1&foo[0][name]=bar&foo[1][value]=2&foo[1][name]=ultra%20bar

使用 Visual Studio 2017 中的基本核心 API 模板,我只更改了 Controller 。

public class FooParameter
{
public string value { get; set; }
public string name { get; set; }
}
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get([FromQuery]bool simple, [FromQuery]FooParameter[] foos)
{
return new string[] { "value1", "value2" };
}

结果是:

simple = True
foos = Length 0 Array of FooParameter

我试过了

  • 使用 Microsoft.AspNetCore.Mvc.WebApiCompatShim:无
  • 使用自定义的 ModelBinder :似乎认为 foo[0][value] 是参数的整个键
  • 使用动态或对象作为类型:空对象
  • 改为降低到一级“&foo[value]=1&foo[name]=bar”(用于测试):包含 null,null

我可以自己用 Request.Query 解析所有内容,但它也认为“foo[0][value]”是参数键,我得到了一个巨大的可能性列表。

我很确定我遗漏了一些非常明显的东西,但我就是找不到任何东西。我唯一的限制是我不能触及查询字符串格式。

最佳答案

我找到了必须转换参数的方式,以便正确加载 HTML 数组。它不是完全动态的,但可以满足我的需要。

您需要在 FromQuery 上使用 Name 属性才能获取对象。

public class FooBar
{
[FromQuery(Name = "[bar]")]
public string bar { get; set; }
[FromQuery(Name = "[id]")]
public int id { get; set; }
}
// GET api/values
[HttpGet]
public ActionResult<FooBar> Get([FromQuery(Name = "foo")]FooBar[] foo)
{
return foo;
}

这将采用 ?foo[0][bar]=val&foo[0][id]=1&foo[1][bar]=val2&foo[1][id]=2 并返回 [{"bar":"val ","id":1},{"bar":"val2","id":2}]

您可以保留 [ApiController] 而无需制作自定义 ModelBinder。

关于c# - 如何在 .NET Core 2.1 中重现复杂参数的 [FromUri] 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51423649/

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