asp.net core 入口 验证token,但有的接口要跳过验证
asp.net core 入口 验证token,但有的接口要跳过验证
在ASP.NET Core中,你可以使用中间件来验证token,并为特定的接口创建一个属性来标记是否跳过验证。以下是一个简化的例子:
-  创建一个自定义属性来标记是否跳过验证: 
 public class SkipTokenValidationAttribute : Attribute
 {
 public bool Skip { get; set; } = false;
 }
-  创建中间件来验证token: 
 public class TokenValidationMiddleware
 {
 private readonly RequestDelegate _next;
 
 public TokenValidationMiddleware(RequestDelegate next)
 {
 _next = next;
 }
 
 public async Task Invoke(HttpContext context)
 {
 var endpoint = context.Features.Get<IEndpointFeature>()?.Endpoint;
 if (endpoint != null)
 {
 var skipAttr = endpoint.Metadata.GetMetadata<SkipTokenValidationAttribute>();
 if (skipAttr?.Skip != null && skipAttr?.Skip != true)
 {
 var token = "";// context.Request.Query.
 if(context.Request.Query!=null && context.Request.Query.ContainsKey("token"))
 {
 token = context.Request.Query["token"].ToString().Trim();
 }
 if (context.Request.Form!=null && context.Request.Form.ContainsKey("token"))
 {
 token = context.Request.Form["token"].ToString().Trim();
 }
 if(!string.IsNullOrEmpty(token))
 {
 //验证token...
 }
 else
 {
 context.Response.StatusCode = 401;
 return;
 }
 // 验证token的逻辑
 //var token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last();
 //if (token != null)
 //{
 // // 验证token的逻辑
 // // 如果token无效,返回未授权的错误
 // context.Response.StatusCode = 401;
 // return;
 //}
 }
 }
 
 await _next(context);
 }
 }
-  注册中间件:在Startup.cs中的 Configure方法中添加中间件(注意要写在app.UseRouting()之后):
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
 {
 // 其他中间件配置...
 
 app.UseMiddleware<TokenValidationMiddleware>();
 
 // 其他中间件配置...
 }
-   
-  使用 SkipTokenValidationAttribute属性来标记那些不需要验证token的接口:
 //[ApiController] //有这个,好像接口字符参数都必须填写值
 [Route("[controller]")]
 [SkipTokenValidation]//控制下所有接口都要验证
 public class SkipTokenController : ControllerBase
 {
 // 这个接口会跳过token验证
 [HttpGet]
 [SkipTokenValidation(Skip = true)]
 public IActionResult SkipValidation()
 {
 return Ok("This endpoint is skipping token validation.");
 }
 
 // 这个接口需要token验证
 [HttpGet("validate")]
 public IActionResult ValidateToken()
 {
 return Ok("This endpoint is requiring token validation.");
 }
 }
 以上代码展示了如何在ASP.NET Core中创建一个中间件来验证token,并根据接口是否需要跳过验证来处理请求。在实际应用中,你需要替换验证token的逻辑以满足你的安全需求
