58 lines
1.8 KiB
C#
58 lines
1.8 KiB
C#
// 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<string>
|
|
{
|
|
Code = (int)ErrorCode.ArgsError,
|
|
Data = "sign is error"
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// 没有 Sign 字段
|
|
context.Result = new ObjectResult(new ResponseData<string>
|
|
{
|
|
Code = (int)ErrorCode.ArgsError,
|
|
Data = "sign is null"
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
context.Result = new ObjectResult(new ResponseData<string>
|
|
{
|
|
Code = (int)ErrorCode.ArgsError,
|
|
Data = "请求格式必须是 form-data"
|
|
});
|
|
return;
|
|
}
|
|
|
|
// 验证通过,继续执行 Action
|
|
await next();
|
|
}
|
|
} |