AuthorExistFilterAttribute.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Microsoft.AspNetCore.Mvc.Filters;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IdentityModel.Tokens.Jwt;
  5. using System.Linq;
  6. using System.Security.Claims;
  7. using System.Threading.Tasks;
  8. namespace Ropin.Environmentally.AlarmService.Filters
  9. {
  10. public class AuthorExistFilterAttribute : ActionFilterAttribute
  11. {
  12. public override void OnActionExecuting(ActionExecutingContext context)
  13. {
  14. var test = context.HttpContext.Request.Path;
  15. string bearer = context.HttpContext.Request.Headers["Authorization"].FirstOrDefault();
  16. if (string.IsNullOrEmpty(bearer) || !bearer.Contains("Bearer")) return;
  17. string[] jwt = bearer.Split(' ');
  18. var tokenObj = new JwtSecurityToken(jwt[1]);
  19. var claimsIdentity = new ClaimsIdentity(tokenObj.Claims);
  20. var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
  21. context.HttpContext.User = claimsPrincipal;
  22. }
  23. //public static Guid GetUserId(this ClaimsPrincipal claimsPrincipal)
  24. //{
  25. // try
  26. // {
  27. // var claim = claimsPrincipal?.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier);
  28. // if (claim == null || string.IsNullOrEmpty(claim.Value))
  29. // {
  30. // return Guid.Empty;
  31. // }
  32. // return Guid.Parse(claim.Value);
  33. // }
  34. // catch
  35. // {
  36. // return Guid.Empty;
  37. // }
  38. //}
  39. //public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
  40. //{
  41. // var authorIdParameter = context.ActionArguments.Single(m => m.Key == "authorId");
  42. // Guid authorId = (Guid)authorIdParameter.Value;
  43. // //var isExist = await RepositoryWrapper.Author.IsExistAsync(authorId);
  44. // //if (!isExist)
  45. // //{
  46. // // context.Result = new NotFoundResult();
  47. // //}
  48. // await base.OnActionExecutionAsync(context, next);
  49. //}
  50. ////_httpContextAccessor为IHttpContextAccessor通过构造函数注入
  51. //[HttpGet("get1")]
  52. //[AuthorExistFilterAttribute]
  53. //public async Task<int> Get1()
  54. //{
  55. // var id = _httpContextAccessor.HttpContext.User.GetUserId();
  56. // return id;
  57. //}
  58. }
  59. }