页面过滤器 IPageFilter
资源过滤器 IResourceFilter
接口过滤器 IActionFilter
权限过滤器 IAuthorizationFilter
当然还有其他的很多
下面以接口过滤器为例:
1、定义类
using Microsoft.AspNetCore.Mvc.Filters;
using System;
namespace xxx
{
public class ActionFilter : IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
}
public void OnActionExecuting(ActionExecutingContext context)
{
}
}
}
context.Result赋值后该访问便被拦截
2、在Startup.ConfigureServices中注入
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options => options.Filters.Add<ActionFilter>());
...
静态文件过滤器:
1、定义类
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.StaticFiles;
namespace xxx
{
public class StaticFileFilter
{
private static void OnPrepareResponse(StaticFileResponseContext context)
{
}
public static StaticFileOptions Options;
static StaticFileFilter()
{
Options = new StaticFileOptions();
Options.OnPrepareResponse = OnPrepareResponse;
}
}
}
如果想拦截该访问,参考以下代码:
public static void Forbid(StaticFileResponseContext context)
{
var response = context.Context.Response;
response.StatusCode = HttpUtil.GetStatusCode(HttpStatusCode.Forbidden);
response.ContentLength = 0;
response.Body = BinaryUtil.EmptyStream;
}
2、在Startup.Configure中应用
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStaticFiles(StaticFileFilter.Options);
...
问: 如果想对所有资源进行监控,用哪个?
答:ResourceFilter(所有动态资源拦截)+StaticFileFilter(所有静态资源拦截)