错误Asp.Net的Web API实现自定义模型绑定 [英] Error implementing a Custom Model Binder in Asp.Net Web API
问题描述
即时通讯坚持这个很奇怪的问题。结果
我有一个名为API控制器 AttendanceController
从 APIControllerFA
这是inturn从 ApiController 派生派生code>结果
这里是code
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 ");
...........
由于可以在PostAttendance方法我有一个自定义的 ModelBinder的
命名可以看出 AttendenceRegistrationModelBinder
,也是它的$ C $ç结果
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?
推荐答案
您遇到的问题是,你正在使用的MVC模式粘结剂不是的WebAPI。它看起来像您从 System.Web.Mvc.DefaultModelBinder
导出它实现 System.Web.Mvc.IModelBinder
。
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
.
要创建的WebAPI自定义模型绑定您需要执行 System.Web.Http.IModelBinder
。
To create a custom model binder for WebApi you need to implement System.Web.Http.IModelBinder
.
采取的WebAPI例如可一看模型粘合剂在CompsiteModelBinder <一个href=\"http://aspnetwebstack.$c$cplex.com/SourceControl/changeset/view/f079d76e57b5#src%2fSystem.Web.Http%2fModelBinding%2fBinders%2fCompositeModelBinder.cs\">http://aspnetwebstack.$c$cplex.com/SourceControl/changeset/view/f079d76e57b5#src%2fSystem.Web.Http%2fModelBinding%2fBinders%2fCompositeModelBinder.cs.
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.
一些有用的资源<一个href=\"http://blogs.msdn.com/b/jmstall/archive/2012/05/11/webapi-parameter-binding-under-the-hood.aspx\">here和<一个href=\"http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx\">here.
您是否使用<一个考虑href=\"http://www.hanselman.com/blog/TinyHappyFeatures2ASPNETWebAPIInVisualStudio2012.aspx\">JToken为您的JSON表单字段这可能工作没有定制绑定。
Have you considered using a JToken for your Json form field this may work without a custom binder.
这篇关于错误Asp.Net的Web API实现自定义模型绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!