方法一:
直接獲取某值
//直接獲取值 注意爲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