加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何从身体绑定时自定义模型绑定器?

发布时间:2020-12-16 09:38:45 所属栏目:asp.Net 来源:网络整理
导读:我一直在尝试使用模型绑定来使我们的API更易于使用.当使用API??时,我无法在数据在正文中时将模型绑定绑定到绑定,只有当它是查询的一部分时. 我的代码是: public class FunkyModelBinder : IModelBinder{ public bool BindModel(HttpActionContext actionCon
我一直在尝试使用模型绑定来使我们的API更易于使用.当使用API??时,我无法在数据在正文中时将模型绑定绑定到绑定,只有当它是查询的一部分时.

我的代码是:

public class FunkyModelBinder : IModelBinder
{
    public bool BindModel(HttpActionContext actionContext,ModelBindingContext bindingContext)
    {
        var model = (Funky) bindingContext.Model ?? new Funky();

        var hasPrefix = bindingContext.ValueProvider
                                      .ContainsPrefix(bindingContext.ModelName);
        var searchPrefix = (hasPrefix) ? bindingContext.ModelName + "." : "";
        model.Funk = GetValue(bindingContext,searchPrefix,"Funk");
        bindingContext.Model = model;
        return true;
    }

    private string GetValue(ModelBindingContext context,string prefix,string key)
    {
        var result = context.ValueProvider.GetValue(prefix + key);
        return result == null ? null : result.AttemptedValue;
    }
}

当查看bindingContext上的ValueProvider属性时,我只看到QueryStringValueProvider和RouteDataValueProvider,我认为这意味着如果数据在正文中,我将无法得到它.我该怎么做?我想支持将数据发布为json或form-encoded.

解决方法

我也在研究这个问题.

WebApis Model Binder附带两个内置的ValueProviders.

QueryStringValueProviderFactory& RouteDataValueProviderFactory

你打电话时搜索哪些

context.ValueProvider.GetValue

这个问题有一些关于如何绑定来自正文的数据的代码.

how to pass the result model object out of System.Web.Http.ModelBinding.IModelBinder. BindModel?

您可以创建一个自定义ValueProvider来执行此操作,这可能是一个更好的主意 – 将搜索与键匹配的值.上面的链接只是在模型绑定器中执行此操作,这限制了ModelBinder仅查看正文.

public class FormBodyValueProvider : IValueProvider
{
    private string body;

    public FormBodyValueProvider ( HttpActionContext actionContext )
    {
        if ( actionContext == null ) {
            throw new ArgumentNullException( "actionContext" );
        }

        //List out all Form Body Values
        body = actionContext.Request.Content.ReadAsStringAsync().Result;
    }

    // Implement Interface and use code to read the body
    // and find your Value matching your Key
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读