【发布时间】:2012-11-28 03:49:34
【问题描述】:
我遇到了这个非常奇怪的问题。
我有一个名为 AttendanceController 的 API 控制器派生自 APIControllerFA,而 APIControllerFA 又派生自 ApiController
这是代码
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);
}
}
但是当我尝试使用 Fiddler 访问此控制器时。我收到一个错误提示
Could not create a 'IModelBinder' from 'AttendanceRegistrationModelBinder'. Please ensure it derives from 'IModelBinder' and has a public parameterless constructor
我在这里做错了什么?
【问题讨论】:
标签: c# asp.net-mvc-4 asp.net-web-api custom-model-binder