我一直在尝试使用模型绑定来使我们的API更易于使用。当使用API时,只有在查询中包含数据时,才能将模型绑定绑定到数据。如何在从身体绑定时自定义模型绑定器?
我的代码是:
public class FunkyModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var model = (Funky) bindingContext.Model ?? new Funky();
var hasPrefix = bindingContext.ValueProvider
.ContainsPrefix(bindingContext.ModelName);
var searchPrefix = (hasPrefix) ? bindingContext.ModelName + "." : "";
model.Funk = GetValue(bindingContext, searchPrefix, "Funk");
bindingContext.Model = model;
return true;
}
private string GetValue(ModelBindingContext context, string prefix, string key)
{
var result = context.ValueProvider.GetValue(prefix + key);
return result == null ? null : result.AttemptedValue;
}
}
当在ValueProvider
财产上的bindingContext
我只看到QueryStringValueProvider
和RouteDataValueProvider
我认为这意味着,如果数据是在身体,我不会把它看。我应该怎么做?我想支持发布数据为json或者form-encoded。
你能描述更多关于您的情况?在webapi中,默认情况下,来自正文的数据通过格式化程序绑定。 – 2013-03-19 06:16:12
那么也许我应该使用格式化程序呢? – 2013-03-19 10:11:57
是的..正确...看看下面的文章了解更多详情:http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding的.aspx – 2013-03-19 14:28:14