首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Asp.Net Web API中实现自定义模型绑定器时出错

在Asp.Net Web API中实现自定义模型绑定器时出错
EN

Stack Overflow用户
提问于 2012-12-11 01:23:47
回答 1查看 4.2K关注 0票数 3

我被这个非常奇怪的问题困扰着。

我有一个名为AttendanceController的API控制器,它派生自APIControllerFA,而它又派生自ApiController

以下是代码

代码语言:javascript
运行
复制
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,下面是它的代码

代码语言:javascript
运行
复制
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访问这个控制器时。我收到一个错误,说

代码语言:javascript
运行
复制
Could not create a 'IModelBinder' from 'AttendanceRegistrationModelBinder'. Please ensure it derives from 'IModelBinder' and has a public parameterless constructor

我在这里做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-11 18:00:18

您遇到的问题是您使用的是MVC模型绑定器,而不是WebApi。看起来你是从实现System.Web.Mvc.IModelBinderSystem.Web.Mvc.DefaultModelBinder派生出来的。

要为WebApi创建自定义模型绑定器,您需要实现System.Web.Http.IModelBinder

看看WebApi中可用的模型绑定器,例如CompsiteModelBinder http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/f079d76e57b5#src%2fSystem.Web.Http%2fModelBinding%2fBinders%2fCompositeModelBinder.cs

一些有用的资源herehere

你有没有考虑过为你的Json表单字段使用JToken,这可以在没有自定义绑定器的情况下工作。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13805915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档