网站建设的技术准备,如何seo搜索引擎优化,2022网络游戏排行榜前十名,长安网站建设公司哪家好asp.net core 入口 验证token,但有的接口要跳过验证
在ASP.NET Core中#xff0c;你可以使用中间件来验证token#xff0c;并为特定的接口创建一个属性来标记是否跳过验证。以下是一个简化的例子#xff1a; 创建一个自定义属性来标记是否跳过验证#xff1a; public clas…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.GetIEndpointFeature()?.Endpoint; if (endpoint ! null) { var actionMethod ;//[control]/[action] var controllerActionDescriptor endpoint.Metadata.GetMetadataControllerActionDescriptor(); if (controllerActionDescriptor ! null) { actionMethod controllerActionDescriptor.AttributeRouteInfo?.Template;//.ControllerName; } if (context.Request.PathBase.Equals(, StringComparison.OrdinalIgnoreCase) context.Request.Path.Equals(/, StringComparison.OrdinalIgnoreCase)) { //访问域名不包含其他地址信息跳转到guest.html context.Response.Redirect(Admin/admin/guest.html); } else { var skipAttr endpoint.Metadata.GetMetadataSkipTokenValidationAttribute(); 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.UseMiddlewareTokenValidationMiddleware(); // 其他中间件配置... 添加自定义中间件用于处理域名跳转 // app.Use(async (context, next) // { // if (context.Request.PathBase.Equals(, StringComparison.OrdinalIgnoreCase) context.Request.Path.Equals(/, StringComparison.OrdinalIgnoreCase)) // { // //访问域名不包含其他地址信息跳转到guest.html // context.Response.Redirect(Admin/admin/guest.html); // } // else // { // await next(); // } // }); } 使用SkipTokenValidationAttribute属性来标记那些不需要验证token的接口 //[ApiController] //有这个好像接口字符参数都必须填写值 [Route([controller])] [SkipTokenValidation]//控制下所有接口都要验证 //[ApiExplorerSettings(IgnoreApi true)]//在swagger上隐藏该控制器 public class SkipTokenController : ControllerBase { // 这个接口会跳过token验证 [HttpGet] [SkipTokenValidation(Skip true)] public IActionResult SkipValidation() { return Ok(This endpoint is skipping token validation.); } // 这个接口需要token验证 [HttpGet(validate)] //[ApiExplorerSettings(IgnoreApi true)]//在swagger上隐藏该接口 public IActionResult ValidateToken() { return Ok(This endpoint is requiring token validation.); } } 以上代码展示了如何在ASP.NET Core中创建一个中间件来验证token并根据接口是否需要跳过验证来处理请求。在实际应用中你需要替换验证token的逻辑以满足你的安全需求