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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章