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