c# – 如何在.NET Core 2.1中重现复杂参数的[FromUri]行为
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何在.NET Core 2.1中重现复杂参数的[FromUri]行为,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1872字,纯文字阅读大概需要3分钟。
内容图文
![c# – 如何在.NET Core 2.1中重现复杂参数的[FromUri]行为](/upload/InfoBanner/zyjiaocheng/782/89487550a31f4076933a9fc33e6bd936.jpg)
我目前正在创建一个新的API,但我需要通过URL接收复杂的参数.我不能轻易更改这些参数而不会在其他系统上冒错误.
我正在使用.Net Core 2.1,因为[FromUri]不存在,我不得不使用[FromQuery].问题是它不会填充复杂的参数.我知道这不是.NET Core的基本功能,但我在寻找解决方案,但似乎没有解决方案.我尝试了一个干净的项目并遇到了同样的问题.
使用Visual Studio 2017中的基本Core API模板,我只更改了控制器.
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},{ “酒吧”: “val2的”, “ID”:2}]
你可以保留[ApiController]而不需要制作自定义的ModelBinder.
内容总结
以上是互联网集市为您收集整理的c# – 如何在.NET Core 2.1中重现复杂参数的[FromUri]行为全部内容,希望文章能够帮你解决c# – 如何在.NET Core 2.1中重现复杂参数的[FromUri]行为所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。