.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" });
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章