Yuebon.NetCore/Yuebon.AspNetCore/Mvc/ApiController.cs

(开头部分) 9KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

namespace Yuebon.AspNetCore.Controllers;

/// <summary>
/// WebApi控制器基类
/// </summary>
[ApiController]
[EnableCors("yuebonCors")]
public class ApiController : Controller
{
    /// <summary>
    /// 当前登录的用户属性
    /// </summary>
    public YuebonCurrentUser CurrentUser;

    #region 
    /// <summary>
    /// 重写基类在Action执行之前的事情
    /// 根据token获得当前用户,允许匿名的不需要获取用户
    /// </summary>
    /// <param name="context">重写方法的参数</param>
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        try
        {
            var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;
            //匿名访问,不需要token认证、签名和登录
            var allowanyone = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(AllowAnonymousAttribute), true);
            if (allowanyone != null) return;

            CommonResult result = new CommonResult();
            //需要token认证
            string authHeader = context.HttpContext.Request.Headers["Authorization"];//Header中的token
            if (string.IsNullOrEmpty(authHeader))
            {
                result.ErrCode = "40004";
                result.ErrMsg = ErrCode.err40004;
                context.Result = ToJsonContent(result);
                return;
            }
            else
            {
                string token = string.Empty;
                if (authHeader != null && authHeader.StartsWith("Bearer ", StringComparison.Ordinal)) token = authHeader.Substring(7);
                TokenProvider tokenProvider = new TokenProvider();
                result = tokenProvider.ValidateToken(token);
                //token验证失败
                if (!result.Success)
                {
                    context.Result = ToJsonContent(result);
                }
                else
                {
                    #region 签名验证
                    bool boolSign = context.HttpContext.Request.Headers["sign"].SingleOrDefault().ToBool(true);
                    var isSign = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(NoSignRequiredAttribute), true);
                    //需要签名验证
                    if (isSign == null && boolSign)
                    {
                        CommonResult resultSign = SignHelper.CheckSign(context.HttpContext);
                         if (!resultSign.Success)
后面还有 163 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。