错误Asp.Net的Web API实现自定义模型绑定 [英] Error implementing a Custom Model Binder in Asp.Net Web API

查看:274
本文介绍了错误Asp.Net的Web API实现自定义模型绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

即时通讯坚持这个很奇怪的问题。结果
我有一个名为API控制器 AttendanceController APIControllerFA 这是inturn从 ApiController 结果
这里是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆