我一直在嘗試使用模型綁定來使我們的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