/// <summary>
/// JsonPost特性类
/// </summary>
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class JsonPostAttribute : ActionFilterAttribute
{
/// <summary>
/// 类型
/// </summary>
public Type ParamType { get; set; }
/// <summary>
/// .ctor
/// </summary>
public JsonPostAttribute(Type paramType)
{
ParamType = paramType;
}
/// <summary>
/// .ctor
/// </summary>
public JsonPostAttribute()
{
}
/// <summary>
/// Action执行前过滤器
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
using (System.IO.StreamReader sr = new System.IO.StreamReader(filterContext.HttpContext.Request.InputStream,
System.Text.Encoding.GetEncoding("utf-8")))
{
var data = sr.ReadToEnd();
var methodInfo = ((ReflectedActionDescriptor)filterContext.ActionDescriptor).MethodInfo;
if (ParamType == null)
{
foreach (var p in methodInfo.GetParameters())
{
ParamType = p.ParameterType;
break;
}
}
if (ParamType != null)
{
var callback = data.ToInstance(ParamType);
foreach (var p in methodInfo.GetParameters())
{
if (p.ParameterType.FullName == ParamType.FullName)
{
filterContext.ActionParameters[p.Name] = callback;
break;
}
}
}
}
}
}
调用 方式
[JsonPost]
public JsonResult Create(CreateOrUpdateOrderReq req)
{
return req!=null && req.Id>0;
}
前端Post
{"Id":1}
另一种实现
客户端调用时 header 里 添加
Content-Type: application/json;charset=UTF-8
则MVC会自动解析