WebAPI模型绑定中如何实现大小写不敏感的Dictionary?
实现WebAPI模型绑定中Dictionary键大小写不敏感
可以实现,以下是两种实用方案:
方案一:构造函数初始化Dictionary
直接在模型的构造函数里把Dictionary初始化为大小写不敏感的实例,WebAPI模型绑定过程会直接复用这个实例:
class Model { public Dictionary<string, string> D { get; set; } public Model() { D = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); } }
方案二:自定义模型绑定器
如果需要更灵活的绑定逻辑,可以自定义模型绑定器来控制Dictionary的创建:
- 实现自定义绑定器:
public class CaseInsensitiveDictionaryBinder : IModelBinder { public Task BindModelAsync(ModelBindingContext bindingContext) { if (bindingContext == null) throw new ArgumentNullException(nameof(bindingContext)); var values = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (values == ValueProviderResult.None) return Task.CompletedTask; var caseInsensitiveDict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); foreach (var kvStr in values.Values) { var split = kvStr.Split('='); if (split.Length == 2) { caseInsensitiveDict[split[0]] = split[1]; } } bindingContext.Result = ModelBindingResult.Success(caseInsensitiveDict); return Task.CompletedTask; } }
- 在模型属性上标记使用该绑定器:
class Model { [ModelBinder(BinderType = typeof(CaseInsensitiveDictionaryBinder))] public Dictionary<string, string> D { get; set; } }
两种方案都能达成需求,方案一更简洁,适合常规场景;方案二适合需要定制绑定逻辑的场景。
内容的提问来源于stack exchange,提问作者Binesh Nambiar C
相关产品推荐
相关产品推荐

