• 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)
            {
            }
    

      

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

  • 相关阅读:
    html input type=file 选择图片,图片预览 纯html js实现图片预览
    asp.net mvc Controller控制器返回类型
    webrequest HttpWebRequest webclient/HttpClient
    js中__proto__和prototype constructor 的区别和关系
    JQuery的ajaxFileUpload的使用
    cuda中当数组数大于线程数的处理方法
    cuda中threadIdx、blockIdx、blockDim和gridDim的使用
    cuda和gcc版本不兼容
    【转】CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)
    matlab练习程序(地图上画经纬度)
  • 原文地址:https://www.cnblogs.com/cr7/p/6090924.html
Copyright © 2020-2023  润新知