首页 > 解决方案 > 如何使用 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]”中发现了多个接受所有给定参数类型的构造函数。应该只有一个适用的构造函数。

标签: c#asp.netasp.net-core

解决方案


经过一些源代码分析,我找到了使用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

笔记


推荐阅读