using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Newtonsoft.Json.Linq;
public class RequestActionAttribute : ActionFilterAttribute
{
/// <summary>
/// 方法执行前
/// </summary>
/// <param name="context"></param>
public override void OnActionExecuting(ActionExecutingContext context)
{
//获取请求Controller名
string controller = context.RouteData.Values["Controller"].ToString();
//获取Action
string action = context.RouteData.Values["Action"].ToString();
//获取请求方式
string method = context.HttpContext.Request.Method;
//获取请求头部
//var headrs = filterContext.HttpContext.Request.Headers;
//获取请求参数
//var queryString = filterContext.HttpContext.Request.QueryString;
//var forms = filterContext.HttpContext.Request.Form;
var request = context.HttpContext.Request;
string sign= request.Form["Sign"];
JObject jObj = new JObject();
foreach (var paramName in request.Form.Keys)
{
//jObj.Add(paramName,JToken.FromObject(request.Form[paramName].ToString()));
//jObj.ToString() 转Json会有换行符和空格
jObj.Add(paramName,request.Form[paramName].ToString());
}
string sign = MD5Helper.Md5Hash(jObj.ToJson() +SystemConfig.MerchantCallbackKey);
//中断执行并提示信息
context.Result=new Microsoft.AspNetCore.Mvc.RedirectResult("/OutputMsg?msg='"+ System.Web.HttpUtility.UrlEncode(OutputJson.Write(-1, "签名验证失败"), Encoding.UTF8) +"'");
}
/// <summary>
/// 方法执行后
/// </summary>
/// <param name="context"></param>
public override void OnActionExecuted(ActionExecutedContext context)
{
string controller = context.RouteData.Values["Controller"].ToString();
string action = context.RouteData.Values["Action"].ToString();
string method = context.HttpContext.Request.Method;
object responseResult = null;
if (context.Result is JsonResult)
{
responseResult = ((JsonResult)context.Result).Value;
}
if (context.Result is ObjectResult)
{
responseResult = ((ObjectResult)context.Result).Value;
}
NLogUtils.Info($"Controller:{controller},Action:{action},Method:{method},出参:{responseResult?.ToJson()}", this.GetType().Name);
}
}