Error implementing a Custom Model Binder in Asp.Net Web API
asp.net-mvc-4, asp.net-web-api, c#, custom-model-binder
Solution
The issue you are having is that you are using the MVC model binder not the WebApi. It looks like you are deriving from `System.Web.Mvc.DefaultModelBinder` which implements `System.Web.Mvc.IModelBinder`.
To create a custom model binder for WebApi you need to implement `System.Web.Http.IModelBinder`.
Take a look at the model binders available in WebApi e.g. the CompsiteModelBinder http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/f079d76e57b5#src%2fSystem.Web.Http%2fModelBinding%2fBinders%2fCompositeModelBinder.cs.
Some useful resources here and here.
Have you considered using a JToken for your Json form field this may work without a custom binder.
Problem
im stuck with this very strange problem. i have an API Controller named `AttendanceController` derived from `APIControllerFA` which is inturn derived from `ApiController` here is the code ``` 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 "); ........... ``` As can be seen on the PostAttendance method i have a custom `ModelBinder` named `AttendenceRegistrationModelBinder` for which this is the code ``` 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); } } ``` but when i try to access this controller using the Fiddler. i get an error saying ``` Could not create a 'IModelBinder' from 'AttendanceRegistrationModelBinder'. Please ensure it derives from 'IModelBinder' and has a public parameterless constructor ``` what am i doing wrong here?