首页 > 解决方案 > 为字符串集合实现 IModelBinder

问题描述

实际上在我的 .NET Core 项目中,我使用一个简单的模型绑定器来修剪输入字符串

public class StringModelBinder : IModelBinder
{
    public Task BindModelAsync(ModelBindingContext bindingContext)
    {
        if (bindingContext == null)
            throw new ArgumentNullException(nameof(bindingContext));

        ValueProviderResult valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (valueProviderResult != ValueProviderResult.None)
        {
            bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueProviderResult);

            string valueAsString = string.IsNullOrWhiteSpace(valueAsString) ? null : valueAsString.Trim();

            bindingContext.Result = ModelBindingResult.Success(valueAsString);
        }

        return Task.CompletedTask;
    }
}

我通过 IModelBinderProvider 使用它,它在输入字符串类型时完美运行。但是我注意到在输入时它没有被触发我有一个这样的字符串集合

public IActionResult CollectionTrimTest([FromBody] List<string> values)

要执行它,我认为我应该使用类似的东西

if (context.Metadata.IsCollectionType)
    return new BinderTypeModelBinder(typeof(CollectionModelBinder));

但我真的不知道如何实现 CollectionModelBinder 来根据字符串集合修剪结果。当然,将非常感谢在 StringModelBinder 和 CollectionModelBinder 之间集中修剪逻辑。

标签: asp.net-mvcasp.net-coremodel-bindingcustom-model-binder

解决方案


已解决,似乎 [FromBody] 必须需要一个 JsonConverter。更多信息,请访问https://stackoverflow.com/a/54663595/4963176


推荐阅读