我在 WebAPI 中有一个自定义模型绑定器,它使用“Sytem.Web.Http.ModelBinding”命名空间中的以下方法,该方法is用于为 Web API 创建自定义模型绑定程序的正确命名空间:
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
}
我有一个HTTP POST
在我想使用此自定义模型绑定程序的控制器上。发布的对象包含大约 100 个字段。我想改变其中2个。我需要的是发生默认模型绑定,然后操作这两个字段的模型绑定对象,以便一旦控制器接收到该对象,它就是原始的。
问题是我似乎无法使用上面模型绑定方法中的默认绑定器来模型绑定我的对象。在MVC
有以下情况:
base.BindModel(controllerContext, bindingContext);
同样的方法可以not在 WebAPI 中工作。也许我会犯这个错误,还有另一种方法可以完成我想要的事情,所以如果自定义模型绑定器不是正确的方法,请提出建议。我试图阻止做的是必须操纵控制器内发布的对象。我可以技术上在模型绑定之后执行此操作,但我尝试在调用堆栈的早期执行此操作,以便控制器无需担心这两个字段的自定义操作。
我如何启动默认模型绑定bindingContext
在我的自定义模型绑定器中,以便我有一个完全填充的对象,然后我可以在返回之前操作/按摩我需要的最后两个字段?
在 WebApi 中,“默认”模型绑定器是CompositeModelBinder
它包装了所有已注册的模型绑定程序。如果你想重用它的功能,你可以这样做:
public class MyModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
if (bindingContext.ModelType != typeof(MyModel)) return false;
//this is the default webapi model binder provider
var provider = new CompositeModelBinderProvider(actionContext.ControllerContext.Configuration.Services.GetModelBinderProviders());
//the default webapi model binder
var binder = provider.GetBinder(actionContext.ControllerContext.Configuration, typeof(MyModel));
//let the default binder do it's thing
var result = binder.BindModel(actionContext, bindingContext);
if (result == false) return false;
//TODO: continue with your own binding logic....
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)