using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Collections.Generic; using System.IdentityModel.Tokens.Jwt; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; namespace Ropin.Inspection.Api.Filters { public class AuthorExistFilterAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext context) { var test = context.HttpContext.Request.Path; string bearer = context.HttpContext.Request.Headers["Authorization"].FirstOrDefault(); if (string.IsNullOrEmpty(bearer) || !bearer.Contains("Bearer")) return; string[] jwt = bearer.Split(' '); var tokenObj = new JwtSecurityToken(jwt[1]); var claimsIdentity = new ClaimsIdentity(tokenObj.Claims); var claimsPrincipal = new ClaimsPrincipal(claimsIdentity); context.HttpContext.User = claimsPrincipal; } //public static Guid GetUserId(this ClaimsPrincipal claimsPrincipal) //{ // try // { // var claim = claimsPrincipal?.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier); // if (claim == null || string.IsNullOrEmpty(claim.Value)) // { // return Guid.Empty; // } // return Guid.Parse(claim.Value); // } // catch // { // return Guid.Empty; // } //} //public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) //{ // var authorIdParameter = context.ActionArguments.Single(m => m.Key == "authorId"); // Guid authorId = (Guid)authorIdParameter.Value; // //var isExist = await RepositoryWrapper.Author.IsExistAsync(authorId); // //if (!isExist) // //{ // // context.Result = new NotFoundResult(); // //} // await base.OnActionExecutionAsync(context, next); //} ////_httpContextAccessor为IHttpContextAccessor通过构造函数注入 //[HttpGet("get1")] //[AuthorExistFilterAttribute] //public async Task Get1() //{ // var id = _httpContextAccessor.HttpContext.User.GetUserId(); // return id; //} } }