zoukankan      html  css  js  c++  java
  • asp.net webapi参数绑定

    content={"content": [{"comb_id": "100323","comb_name": "双十一促销","netid": 0,"type": 0,"ischange":0,"goods": [{"skuid": "95526","amount": "3"},{"skuid": "94429","amount": "2"}]},{"comb_id": "100300","comb_name": "双十二促销","netid": 0,"type": 0,"ischange":0,"goods": [{"skuid": "95526","amount": "3"},{"skuid": "94429","amount": "2"}]}]}&notify_id=100&notify_time=2014-01-01 12:12:00&notify_type=InvSkuWm&sign=9MJfZcor07o5WP4F8W2qQA==

    当有个post请求,body参数如上,这时我希望我的action能获取content参数并绑定到我action对应的参数实体上,可以通过重写ExecuteBindingAsync方法和GetBinding方法实现

    /// <summary>
        /// 参数绑定
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class CommonParameterBinding<T> : HttpParameterBinding
        {
            private readonly string _parameterName;
            public CommonParameterBinding(HttpParameterDescriptor descriptor,string parameterName) : base(descriptor)
            {
                _parameterName = parameterName;
            }
    
            public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext,
                CancellationToken cancellationToken)
            {
                var nv = actionContext.Request.Content.ReadAsFormDataAsync(cancellationToken).Result;
                var jsonStr = HttpUtility.UrlDecode(nv[_parameterName]);
                var instance = JsonHelper.ConvertToObject<T>(jsonStr);
                actionContext.ActionArguments[Descriptor.ParameterName] = instance;
    
                var tsc = new TaskCompletionSource<object>();
                tsc.SetResult(null);
                return tsc.Task;
            }
        }
    

      

    public class CombinMappingBindingAttribute : ParameterBindingAttribute
        {
            public override HttpParameterBinding GetBinding(HttpParameterDescriptor parameter)
            {
                return parameter.ParameterType == typeof (CombMappingRequest)
                    ? new CommonParameterBinding<CombMappingRequest>(parameter, "content")
                    : parameter.BindAsError("Wrong parameter type");
            }
        }
    

      

    /// <summary>
            /// 礼包对应关系
            /// </summary>
            /// <param name="request"></param>
            /// <returns></returns>
            [HttpPost]
            public JsonResult<NetResponse> Mapping([CombinMappingBinding]CombMappingRequest request)
            {
            }
    

      

    测试了一下发现参数中只能有一个绑定。

  • 相关阅读:
    关于struts页面跳转的问题
    java中==和equals的区别
    控制广播风暴的方法
    广播风暴的成因及解决办法
    思科FEX配置
    思科vPC技术和配置
    数据中心架构TOR和EOR
    ARP表项及老化时间
    MAC地址表和老化时间
    track 3 list boolean or
  • 原文地址:https://www.cnblogs.com/cr7/p/6090924.html
Copyright © 2011-2022 走看看