如何解决Asp Net Core uri 参数中的 IDictionary 问题
[HttpGet]
public async Task<IActionResult> GetTasks([FromQuery] IDictionary<string,string> processVariables,string orderBy = "created:asc")
当我使用查询 /api/v1/usertasks?orderBy=created%3Aasc 触发它时,字符串 created:asc
出现在 processVariables
和 orderBy
参数中:
基本上,Asp Net Core 引擎将此值视为字典键值和名为 orderBy
的参数。有没有办法让 created:asc
值仅作为 orderBy
参数解析?
否则,组织此端点的最佳方法是什么,使其具有字典参数和具有默认值的字符串参数?
这发生在 Asp Net Core 3.1
解决方法
您仅在查询字符串中传递可选参数 Orderby。
/api/v1/usertasks?orderBy=created%3Aasc
按照惯例,如果你有字典,它会填满 键值中的“任何字符串和任何字符串”,您将永远无法使用您的可选参数。
要正确使用您的字典,您需要:
/api/v1/usertasks?processVariables[0]=firstString&processVariables[1]=secondString&orderBy=created%3Aasc
PS:在端点上使用字典会破坏你的 swagger 文档
,您可以尝试创建一个包含 IDictionary<string,string> processVariables
和 string orderBy = "created:asc"
的模型,这样 orderBy=created%3Aasc 将不会绑定到 processVariables
。这是一个演示:
型号:
public class DictionaryModel
{
public string orderBy { get; set; }
public IDictionary<string,string> processVariables { get; set; }
}
操作:
[HttpGet]
public async Task<IActionResult> GetTasks(DictionaryModel d)
{
return Ok();
}
,
我设法使用以下端点签名解决了这个问题:
[HttpGet]
public async Task<IActionResult> GetTasks([FromQuery] ICollection<KeyValuePair<string,string>> processVariables,string orderBy = "created:asc")
应使用此 url 调用端点:
/api/v1/usertasks?processVariables[0].Key=1&processVariables[0].Value=2&orderBy=created%3Aasc
这种方式即使没有提供processVariables,所有端点参数都被正确填充
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。