C# 在Asp.Net Web API中实现自定义模型绑定器时出错
我被这个非常奇怪的问题困住了。C# 在Asp.Net Web API中实现自定义模型绑定器时出错,c#,asp.net-mvc-4,asp.net-web-api,custom-model-binder,C#,Asp.net Mvc 4,Asp.net Web Api,Custom Model Binder,我被这个非常奇怪的问题困住了。 我有一个名为AttendanceController的API控制器,它是从ApicController派生而来的ApicController 这是密码 public class AttendanceController : ApiControllerFA { public HttpResponseMessage PostAttendance([ModelBinder(typeof(AttendanceRegistrationModelBin
我有一个名为
AttendanceController
的API控制器,它是从ApicController
派生而来的ApicController
这是密码
public class AttendanceController : ApiControllerFA
{
public HttpResponseMessage PostAttendance([ModelBinder(typeof(AttendanceRegistrationModelBinder))]AttendanceRegistrationModel model)
{
//checking model state for errors
//throw new Exception("Just to throw an error ");
...........
从PostAttendance方法中可以看出,我有一个名为AttendenceRegistrationModelBinder
的自定义ModelBinder
,这是它的代码
public class AttendanceRegistrationModelBinder : DefaultModelBinder
{
protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor)
{
if (propertyDescriptor.Name == "formJson")
{
string val = bindingContext.ValueProvider.GetValue(propertyDescriptor.Name).AttemptedValue;
dynamic jsonVal = JsonConvert.DeserializeObject(val);
propertyDescriptor.SetValue(bindingContext.Model, jsonVal);
return;
//SetProperty(controllerContext, bindingContext,propertyDescriptor,jsonVal);
}
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
但是当我尝试使用小提琴手访问这个控制器时。我听到一个错误说
Could not create a 'IModelBinder' from 'AttendanceRegistrationModelBinder'. Please ensure it derives from 'IModelBinder' and has a public parameterless constructor
我做错了什么?您遇到的问题是您使用的是MVC模型绑定器,而不是WebApi。看起来您是从System.Web.Mvc.DefaultModelBinder
派生的,它实现了System.Web.Mvc.IModelBinder
要为WebApi创建自定义模型绑定器,您需要实现System.Web.Http.IModelBinder
查看WebApi中可用的模型绑定器,例如CompsiteModelBinder
一些有用的资源和工具
您是否考虑过在Json表单字段中使用自定义绑定器?如果没有自定义绑定器,这可能会起作用