// Filters/SignValidationFilter.cs using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.DependencyInjection; namespace ACBuildService.Filters; [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class SignValidationAttribute : Attribute, IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { // 检查请求是否包含 form-data if (context.HttpContext.Request.HasFormContentType) { var form = context.HttpContext.Request.Form; // 尝试从表单中获取 Sign if (form.TryGetValue("Sign", out var signValue)) { if (!signValue.ToString().Equals(App.Settings.Password)) { // 验证失败,直接返回错误 context.Result = new ObjectResult(new ResponseData { Code = (int)ErrorCode.ArgsError, Data = "sign is error" }); return; } } else { // 没有 Sign 字段 context.Result = new ObjectResult(new ResponseData { Code = (int)ErrorCode.ArgsError, Data = "sign is null" }); return; } } else { context.Result = new ObjectResult(new ResponseData { Code = (int)ErrorCode.ArgsError, Data = "请求格式必须是 form-data" }); return; } // 验证通过,继续执行 Action await next(); } }