我想覆盖Web Api项目的默认模型绑定器。怎么办呢?
更多说明:
我现在做的是:
// I defined a custom model binder
public class EmptyStringToNullModelBinder : IModelBinder
//Before all my parameters in actions I use it
public IHttpActionResult PostSomething([FromUri(BinderType = typeof(EmptyStringToNullModelBinder))]string text = null,...)
我的整个项目中有很多字符串参数都使用此属性进行分配。这有点难看。我想告诉Web Api"将此属性用作我所有字符串参数的默认值"。
答案 0 :(得分:1)
ModelBinderProvider
旨在涵盖此类情景。这个抽象类有唯一的方法:
public abstract IModelBinder GetBinder(HttpConfiguration configuration, Type modelType);
GetBinder
应该返回给定类型IModelBinder
的实现,如果无法使用当前绑定器处理类型,则返回null
。
以下是ModelBinderProvider
的通用实现,它将类型映射到绑定器:
public class CustomModelBinderProvider<TModel> : ModelBinderProvider
{
private readonly IModelBinder binder;
public CustomModelBinderProvider(IModelBinder binder)
{
this.binder = binder;
}
public override IModelBinder GetBinder(HttpConfiguration configuration, Type modelType)
{
return modelType == typeof(TModel) ? binder : null;
}
}
在WebApiConfig.Register()
方法中为String
类型设置此模型绑定器:
public static void Register(HttpConfiguration config)
{
// ...
var binderProvider = new CustomModelBinderProvider<string>(new EmptyStringToNullModelBinder());
config.Services.Insert(typeof(ModelBinderProvider), 0, binderProvider);
}
现在,在您的控制器中,您不需要指定活页夹类型,EmptyStringToNullModelBinder
将用于字符串类型:
public IHttpActionResult PostSomething([FromUri]string text = null,...)