如何在自定义IModelBinder
中的Web API中调用默认模型绑定程序?我知道MVC具有默认的资料夹,但是我不能将其与Web API一起使用。我只想使用默认的Web API绑定器,然后再运行一些自定义逻辑(以避免重新发明轮子)。
public class CustomBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
// Get default binding (can't mix Web API and MVC)
var defaultMvcBinder = System.Web.ModelBinding.ModelBinders.Binders.DefaultBinder;
var result = defaultMvcBinder.BindModel(actionContext, bindingContext); // Won't work
if (result == false) return false;
// ... set additional model properties
return true;
}
}
答案 0 :(得分:1)
万一其他人迷惑了这个问题,我必须使用激活上下文来实现自定义模型绑定程序,因为Web API中没有可重复使用的东西。这是我用于需要支持的有限方案的解决方案。
用法
以下实现允许我让任何模型可选地使用Edit
进行模型绑定,但是如果未提供,则默认为仅属性名称。它支持来自标准.NET类型(字符串,整数,双精度型等)的映射。尚未完全投入生产,但到目前为止满足我的用例。
Resource
这允许在查询中映射以下查询字符串:
/resource/create
实施
首先,该解决方案定义了一个映射属性,以跟踪模型的源属性以及在从值提供者设置值时要使用的目标名称。
JsonProperty
然后,定义了一个自定义模型绑定程序来处理映射。它缓存反映的模型属性,以避免在后续调用中重复反映。可能尚未完全投入生产,但初步测试很有希望。
[ModelBinder(typeof(AttributeModelBinder))]
public class PersonModel
{
[JsonProperty("pid")]
public int PersonId { get; set; }
public string Name { get; set; }
}