目录
.net Core 微服务接口增加过滤器实现预处理
1,过滤器的声明
2,过滤器的实现
3,过滤器中的扩展
接口增加过滤器实现预处理
1,过滤器的声明
人狠话不多,直接上代码
Startup.cs文件的ConfigureServices方法增加
services.AddControllers(options =>{// 在这里添加你的过滤器options.Filters.Add(new InitializeRequestFilter());});
2,过滤器的实现
创建过滤器类InitializeRequestFilter
public class InitializeRequestFilter : IActionFilter{public void OnActionExecuting(ActionExecutingContext context){//在请求动作执行前的代码}public void OnActionExecuted(ActionExecutedContext context){// 如果需要,在动作执行后执行的代码}}
这样,在请求时会先执行OnActionExecuting,之后在执行OnActionExecuted
如果是重构的项目,可增加接口地址过滤,以下是例子
3,过滤器中的扩展
先定义一个地址列表(符合这个地址列表的地址才去执行过滤器)
//自定义执行初始化的List<string> filterPaths = new List<string>() {"/domain/updateip", };
这里优雅的使用一段linq实现地址列表过滤
//符合filterPaths的path 执行此过滤器if (filterPaths.Select(p => p.ToLower()).ToList().Exists(x=>x== context.HttpContext.Request.Path.Value.ToLower())){//这个仅仅是个 demoif (true){// 返回一个自定义的ActionResult,例如返回403 Forbiddencontext.Result = new StatusCodeResult(StatusCodes.Status403Forbidden);return;}}
linq不太好咱们就暴力一些,使用foreach
```csharp
// 将filterPaths中的路径转换为小写并存储在filterPathsLower列表中
var filterPathsLower = new List<string>();
foreach (var path in filterPaths)
{filterPathsLower.Add(path.ToLower());
}// 检查请求路径是否存在于filterPathsLower列表中
bool pathExists = false;
foreach (var pathLower in filterPathsLower)
{if (pathLower == context.HttpContext.Request.Path.Value.ToLower()){pathExists = true;break;}
}// 如果请求路径存在于filterPaths列表中
if (pathExists)
{// 这个仅仅是个 demoif (true){// 返回一个自定义的ActionResult,例如返回403 Forbiddencontext.Result = new StatusCodeResult(StatusCodes.Status403Forbidden);return;}
}
```