一基础例子。
how 如何实现
加filter
using Microsoft.AspNetCore.Mvc.Filters;
namespace p7.Utils.Filters
{
public class MyActionFilter : Attribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
Console.WriteLine("MyActionFilter.OnActionExecuting");
}
public void OnActionExecuted(ActionExecutedContext context)
{
Console.WriteLine("MyActionFilter.OnActionExecuted");
}
}
}
//控制器调用。
#region ActionFilter
[MyActionFilter]
public IActionResult Index2()
{
return View();
}
#endregion
whom 可以做缓存,but不适合。 a ctor b [] c process d [] 围饶action 的前后的。 具体的业务逻辑的前后。适合记录日志。
二实操一个记录日志。
using Microsoft.AspNetCore.Mvc.Filters;
namespace p7.Utils.Filters
{
public class CustomeLogActionFilter : Attribute, IActionFilter
{
private readonly ILogger<CustomeLogActionFilter> _Logger;
public CustomeLogActionFilter(ILogger<CustomeLogActionFilter> iLogger)
{
this._Logger = iLogger;
}
public void OnActionExecuting(ActionExecutingContext context)
{
var para = context.HttpContext.Request.QueryString.Value;
var controller = context.HttpContext.GetRouteValue("controller");
var action = context.HttpContext.GetRouteValue("action");
_Logger.LogInformation($"执行 {controller} {action} params : {para}");
}
public void OnActionExecuted(ActionExecutedContext context)
{
var result = Newtonsoft.Json.JsonConvert.SerializeObject(context.Result);
var controller = context.HttpContext.GetRouteValue("controller");
var action = context.HttpContext.GetRouteValue("action");
_Logger.LogInformation($"执行 {controller} {action} params : {result}");
}
}
}
控制器使用的方法 。
#region ActionFilter
[TypeFilter(typeof(CustomeLogActionFilter))]
public IActionResult Index2(int id)
{
ViewBag.user = Newtonsoft.Json.JsonConvert.SerializeObject(
new { Id = id, Name = "Recharge-ViewBag", Age = 34 }
);
ViewData["user2"] = Newtonsoft.Json.JsonConvert.SerializeObject(
new { Id = id, Name = "Recharge-ViewData", Age = 34 }
);
object desccription = "welcome to richard is video lesson";
return View(desccription);
}