OnActionExecuting 获取 请求的参数(可获取嵌套的请求数据)

方法一:

直接获取某值

 //直接获取值  注意为null的情况
 string name = filterContext.Controller.ValueProvider.GetValue("Name").AttemptedValue;

如何想要获取参数集合的话

        /// <summary>
        /// 获取参数集合
        /// </summary>
        /// <param name="filterContext">Context</param>
        /// <returns></returns>
        private Dictionary<string, string> GetFirstParams01(ActionExecutingContext filterContext)
        {
            var Param = filterContext.ActionDescriptor.GetParameters();
            Dictionary<string, string> DictParam = new Dictionary<string, string>();
            if (Param.Length > 0)
            {
                var itemType = Param[0].ParameterType;
                PropertyInfo[] infos = itemType.GetProperties();
                foreach (PropertyInfo info in infos)
                {
                    if (info.CanRead)
                    {
                        var propertyValue = filterContext.Controller.ValueProvider.GetValue(info.Name);
                        if (!DictParam.ContainsKey(info.Name))
                        {
                            DictParam.Add(info.Name, null == propertyValue ? null : propertyValue.AttemptedValue);
                        }
                    }

                }
            }
            return DictParam;
        }

但是这种方法不支持多层次嵌套

方法二:

        /// <summary>
        /// 获取参数集合
        /// </summary>
        /// <param name="filterContext">Context</param>
        /// <returns></returns>
        private Dictionary<string, object> GetFirstParams(ActionExecutingContext filterContext)
        {
            Dictionary<string, object> DictParam = new Dictionary<string, object>();

            var json = string.Empty;
            var EncodingName = filterContext.HttpContext.Request.ContentEncoding.HeaderName;
            System.IO.Stream sm = filterContext.HttpContext.Request.InputStream;
            if (sm != null)
            {
                sm.Seek(0, SeekOrigin.Begin);
                int len = (int)sm.Length;
                byte[] inputbyte = new byte[len];
                sm.Read(inputbyte, 0, len);
                sm.Close();
                json = System.Text.Encoding.GetEncoding(EncodingName).GetString(inputbyte);
            }
            if (string.IsNullOrEmpty(json))
            {
                return DictParam;
            }
            else
            {
                DictParam = MyJson.Deserialize<Dictionary<string, object>>(json);
            }
            return DictParam;
        }

其实呢方法二的思路很简单,主要是从底部获取数据流即可

可参考:https://blog.csdn.net/u011791378/article/details/81906065

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值