src/Library/NetPro.Sign/VerifySignAttribute.cs
(开头部分) 7KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NetPro.Sign;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace NetPro.Web.Core.Filters
{
/// <summary>
/// 验签特性
/// </summary>
/// <remarks>特性方式继承自动生效</remarks>
[Obsolete("过时的特性,签名只适合于中间件方式,用特新方式可能会导致其他中间件提前拦截导致无法命中签名")]
public class VerifySignAttribute : ActionFilterAttribute
{
public VerifySignAttribute()
{
}
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
IServiceProvider serviceProvider = context.HttpContext.RequestServices;
var _logger = serviceProvider.GetRequiredService<ILogger<VerifySignAttribute>>();
//var _configuration = serviceProvider.GetRequiredService<IConfiguration>();
var _verifySignCommon = serviceProvider.GetService<IOperationFilter>();
var _verifySignOption = serviceProvider.GetService<VerifySignOption>();
//无配置默认关闭
if (_verifySignOption == null || !_verifySignOption.Enabled)
{
goto gotoNext;
}
var descriptor = (Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)context.ActionDescriptor;
var attributeController = (IgnoreSignAttribute)descriptor.ControllerTypeInfo.GetCustomAttributes(typeof(IgnoreSignAttribute), true).FirstOrDefault();
if (attributeController != null)
goto gotoNext;
var attribute = (IgnoreSignAttribute)descriptor.MethodInfo.GetCustomAttributes(typeof(IgnoreSignAttribute), true).FirstOrDefault();
if (attribute != null)
goto gotoNext;
var result = await GetSignValue(context.HttpContext, _logger, _verifySignOption, _verifySignCommon);
if (_verifySignOption.IsForce && !result.Item1)
{
SignCommon.BuildErrorJson(context);
await Task.CompletedTask;
return;
}
else
goto gotoNext;
gotoNext:
await next();
后面还有 110 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。