C# .Net核心解析词典<;字符串,字符串>;[FromQuery]

C# .Net核心解析词典<;字符串,字符串>;[FromQuery],c#,.net,C#,.net,我在RESTAPI中解析对象时遇到了奇怪的问题。 当我有这样的控制器时: public async Task<ActionResult> GetCurrencyRateAsync([FromQuery] Dictionary<string,string> param) { return Ok(); } 公共异步任务GetCurrencyRateAsync([FromQuery]字典参数) { 返回Ok(); } 一切正常,我的json解析正确,但当我有带字典的

我在RESTAPI中解析对象时遇到了奇怪的问题。 当我有这样的控制器时:

public async Task<ActionResult> GetCurrencyRateAsync([FromQuery] Dictionary<string,string> param)
{
    return Ok();
}
公共异步任务GetCurrencyRateAsync([FromQuery]字典参数)
{
返回Ok();
}
一切正常,我的json解析正确,但当我有带字典的对象时:

public class CustomFilter
{
    public IDictionary<string, string> param{ get; set; }
}
公共类自定义过滤器
{
公共IDictionary参数{get;set;}
}
[FromQuery]中的我的控制器接受以下对象:

public async Task<ActionResult> GetCurrencyRateAsync([FromQuery] CustomFilter filter)
{
    return Ok();
}
公共异步任务GetCurrencyRateAsync([FromQuery]CustomFilter筛选器)
{
返回Ok();
}

我的字典没有语法分析。这有什么问题?

检查您发送的查询字符串。在ASP.NET Core 3.1中,此设置非常适合我:

    public class MyClass
    {
        public Dictionary<string, string> mod { get; set; } = new Dictionary<string, string>();
    }

    [HttpGet("test1")]
    public IActionResult Test1([FromQuery]Dictionary<string, string> mod)
    {
        return Ok();
    }

    
    [HttpGet("test2")]
    public IActionResult Test2([FromQuery] MyClass mc)
    {
        return Ok();
    }
公共类MyClass
{
公共字典mod{get;set;}=new Dictionary();
}
[HttpGet(“test1”)]
公共IActionResult Test1([FromQuery]字典模块)
{
返回Ok();
}
[HttpGet(“test2”)]
公共IActionResult Test2([FromQuery]MyClass mc)
{
返回Ok();
}
第一个成功绑定URL:

  • ../test1?mod[someKey]=someValue
  • ../test1?[someKey]=someValue
第二个用于:

  • ../test2?mc.mod[someKey]=someValue
  • ../test2?mod[someKey]=someValue

但是对于
../test2?[someKey]=someValue

您使用的查询字符串失败?谢谢!它起作用了。我发送了错误的JSON:[someKey]=someValue。它通过mod[someKey]=someValue传递。@Arkady很乐意帮忙!