WebApi中的IModelBinder字符串操作

时间:2015-11-20 11:04:36

标签: asp.net asp.net-web-api

在Asp.Net MVC中,System.Web.Mvc.IModelBinder允许以下实现更改所有字符串:

public class CustomMvcTextBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        ValueProviderResult result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (result == null)
            return null;

        var value = result.AttemptedValue.Trim().ToUpper();

        return value;
    }
}

然后我将其添加到ModelBinders:

ModelBinders.Binders.Add(typeof(string), new CustomMvcTextBinder());

然而,Asp.Net WebApi实现System.Web.Http.ModelBinding.IModelBinder有一个不同的实现,返回一个bool而不是对象。

如何更改IModelBinder的WebApi版本中的字符串值?

public class CustomWebApiTextBinder : IModelBinder
{
    public bool BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        ValueProviderResult result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (result == null)
            return false;

        var value = result.AttemptedValue.Trim().ToUpper();

        return true;
    }
}

1 个答案:

答案 0 :(得分:3)

您需要设置bindingContext.Model并返回true

var value = result.AttemptedValue.Trim().ToUpper();
bindingContext.Model = value;

return true;

假设你的模型只是一个字符串,当然。否则可能需要更多的对象创建/转换。