services.AddMvc(o =>
{
o.Filters.Add(typeof(CustomExceptionFilterAttribute));// 这里就是全局注册Filter
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
/// <summary>
/// Action的Filter`
/// </summary>
public class CustomActionFilterAttribute : Attribute, IActionFilter
{
private ILogger<CustomActionFilterAttribute> _logger = null;
public CustomActionFilterAttribute(ILogger<CustomActionFilterAttribute> logger)
{
this._logger = logger;
}
public void OnActionExecuted(ActionExecutedContext context)
{
//context.HttpContext.Response.WriteAsync("ActionFilter Executed!");
Console.WriteLine("ActionFilter Executed!");
//this._logger.LogDebug("ActionFilter Executed!");
}
public void OnActionExecuting(ActionExecutingContext context)
{
//context.HttpContext.Response.WriteAsync("ActionFilter Executing!");
Console.WriteLine("ActionFilter Executing!");
//this._logger.LogDebug("ActionFilter Executing!");
}
}
//允许使用ServiceFilter 标记特性
services.AddScoped<CustomActionFilterAttribute>();
/// <summary>
/// 标记到Controller
/// </summary>
public class CustomControllerActionFilterAttribute : Attribute, IActionFilter
{
private ILogger<CustomControllerActionFilterAttribute> _logger = null;
public CustomControllerActionFilterAttribute(ILogger<CustomControllerActionFilterAttribute> logger)
{
this._logger = logger;
}
public void OnActionExecuted(ActionExecutedContext context)
{
//context.HttpContext.Response.WriteAsync("ActionFilter Executed!");
Console.WriteLine("ActionFilter Executed!");
//this._logger.LogDebug("ActionFilter Executed!");
}
public void OnActionExecuting(ActionExecutingContext context)
{
//context.HttpContext.Response.WriteAsync("ActionFilter Executing!");
Console.WriteLine("ActionFilter Executing!");
//this._logger.LogDebug("ActionFilter Executing!");
}
}
[TypeFilter(typeof(CustomControllerActionFilterAttribute),Order =-1)]
public class ThirdController : Controller
{
}
public class CustomGlobalActionFilterAttribute : Attribute, IActionFilter
{
private ILogger<CustomGlobalActionFilterAttribute> _logger = null;
public CustomGlobalActionFilterAttribute(ILogger<CustomGlobalActionFilterAttribute> logger)
{
this._logger = logger;
}
public void OnActionExecuted(ActionExecutedContext context)
{
//context.HttpContext.Response.WriteAsync("ActionFilter Executed!");
Console.WriteLine("ActionFilter Executed!");
//this._logger.LogDebug("ActionFilter Executed!");
}
public void OnActionExecuting(ActionExecutingContext context