c# - 如何使用 DictionaryModelBinder?
问题描述
ASP.NET Core 2.2 DictionaryModelBinder
[HttpGet("{id}", Name = "GetValue")]
public async Task<IActionResult> GetValue(
[ModelBinder(BinderType=typeof(DictionaryModelBinder<string,string>))]
IDictionary<string, string> id)
{
return Ok();
}
错误:
InvalidOperationException:在类型“Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder`2[System.String,System.String]”中发现了多个接受所有给定参数类型的构造函数。应该只有一个适用的构造函数。
解决方案
经过一些源代码分析,我找到了使用DictionaryModelBinder
.
[HttpGet("GetValue")]
public async Task<IActionResult> GetValue([FromQuery] IDictionary<string, string> id)
{
return Ok();
}
并且请求应该是
api/GetValue?id.Key1=Value1&id.Key2=Value2&id.Key3=Value3
(或者)
api/GetValue?id[Key1]=Value1&id[Key2]=Value2&id[Key3]=Value3
笔记
- 无需显式使用
ModelBinderAttribute
. 这是默认添加的 - 我们需要
FromQueryAttribute
为参数添加
推荐阅读
- html - 想要创建那个登陆页面
- reactjs - TypeScript 和自定义 React Hook Api 服务
- python - 如何在 Django 中编辑多对多关系(管理站点)
- html - 如何格式化facebook返回的字符串
- python - Python 别名
- intellij-idea - IDEA用的是JRebel Debug,很混乱
- javascript - Chrome 中的 JQuery-find-each:未捕获 RangeError:超出最大调用堆栈大小
- orocommerce - 在 ORO Commerce 的地址下拉列表中添加新州
- macos - eslint 没有在 VS 代码中运行
- python - cx_Freeze EXE 应用程序在其他计算机上不起作用