.Net Core API自定义资源过滤器实现校验请求头是否要求

对于近来做的一个系统,要求访问API的请求头,必须传System(系统)和Device(设备),且访问值存在于定义的枚举SystemEnum和DeviceEnum中,才可访问API。以下是实现代码:

using _SCscHero.Base.Enum;
using _SCscHero.Model;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Linq;
using static _SCscHero.Base.UnifyAPI;

namespace _SCscHeroAPI.Base.CustomAttribute
{
    /// <summary>
    /// 颁发令牌专用-资源头校验器
    /// </summary>
    public class HeaderResourceFilter : Attribute, IResourceFilter
    {

        /// <summary>
        /// 资源加载后
        /// </summary>
        /// <param name="context"></param>
        public void OnResourceExecuted(ResourceExecutedContext context)
        {

        }
        /// <summary>
        /// 资源加载前
        /// </summary>
        /// <param name="context"></param>
        public void OnResourceExecuting(ResourceExecutingContext context)
        {

            int systemInt = Convert.ToInt32(context.HttpContext.Request.Headers["System"].FirstOrDefault());
            int deviceInt = Convert.ToInt32(context.HttpContext.Request.Headers["Device"].FirstOrDefault());

            if (!Enum.IsDefined(typeof(UnifyLoginEnum.SystemEnum), systemInt))
            {
                context.Result = new ObjectResult(new ResultModel(MsgConstant.HEADER_SYSTEM_ERROR, CodeConstant.HEADER_SYSTEM_ERROR));
                context.HttpContext.Response.Headers.Add("HEADER_SYSTEM_ERROR", new string[] { "HEADER_SYSTEM_ERROR" });
            }
            if (!Enum.IsDefined(typeof(UnifyLoginEnum.DeviceEnum), deviceInt))
            {
                context.Result = new ObjectResult(new ResultModel(MsgConstant.HEADER_DEVICE_ERROR, CodeConstant.HEADER_DEVICE_ERROR));
                context.HttpContext.Response.Headers.Add("HEADER_DEVICE_ERROR", new string[] { "HEADER_DEVICE_ERROR" });
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_33391499/article/details/105353430