如何借助Microsoft.AspNetCore.WebUtilities传递枚举集合作为查询参数?
解决IEnumerable<枚举>作为多值查询参数传递的问题
要生成?myEnums=enum1&myEnums=enum4这种形式的查询参数,不需要用Dictionary(它不允许重复键),直接利用QueryHelpers.AddQueryString的重载方法,传入枚举值转换后的键值对集合即可:
正确代码示例
// 假设someParameters.MyEnums是IEnumerable<MyEnum>类型 var enumQueryParams = someParameters.MyEnums .Select(enumValue => new KeyValuePair<string, string>( nameof(SomeParameters.MyEnums), enumValue.ToString() )); // 直接将键值对集合传入,QueryHelpers会自动生成多值参数 uri = QueryHelpers.AddQueryString(uri, enumQueryParams);
原代码的问题
你之前的错误在于把整个枚举集合的ToString()结果作为单个值添加到Dictionary中,这会导致生成类似?myEnums=System.Linq.Enumerable+WhereSelectEnumerableIterator2[...]`的无效参数,而不是拆分出多个同名的参数项。
额外说明
如果需要传递枚举的数值而不是字符串名称,只需把enumValue.ToString()替换为((int)enumValue).ToString()即可:
.Select(enumValue => new KeyValuePair<string, string>( nameof(SomeParameters.MyEnums), ((int)enumValue).ToString() ))
内容的提问来源于stack exchange,提问作者user7849697
相关产品推荐
相关产品推荐

