1. 程式人生 > 其它 >netcore webapi對請求query引數的檢查特性封裝

netcore webapi對請求query引數的檢查特性封裝

技術標籤:netcore

對於Model的檢查,我們可以使用mvc自帶的類庫【using System.ComponentModel.DataAnnotations;】

但對於Query引數的檢查,我們常常放在實現程式碼裡,個人總覺得太多餘。於是。。。。。。

1.定義特性:QueryRequiredAttribute

    /// <summary>
    /// 查詢引數檢查
    /// </summary>
    public class QueryRequiredAttribute : ActionFilterAttribute
    {
        public string paraNames, emptyTip;

        /// <summary>
        /// 查詢引數檢查(支援多引數),預設提示
        /// </summary>
        /// <param name="paraNames"></param>
        public QueryRequiredAttribute(string paraNames)
        {
            Init(paraNames, null);
        }
        /// <summary>
        /// 查詢引數檢查(支援多引數),自定義空值提示
        /// </summary>
        /// <param name="paraNames"></param>
        /// <param name="emptyTip"></param>
        public QueryRequiredAttribute(string paraNames, string emptyTip)
        {
            Init(paraNames, emptyTip);
        }

        /// <summary>
        /// Action開始之前執行
        /// </summary>
        /// <param name="actionContext"></param>
        public override void OnActionExecuting(ActionExecutingContext actionContext)
        {
            var queryParams = actionContext.HttpContext.Request.Query;
            string msg = null;
            string[] requiredParams = paraNames.Split(',');
            foreach (var item in requiredParams)
            {
                if (!queryParams.ContainsKey(item) || string.IsNullOrWhiteSpace(queryParams[item]))
                {
                    msg = $"value of {item} is required";
                    break;
                }
            }
            if (!string.IsNullOrWhiteSpace(msg))
            {
                actionContext.Result = new JsonResult(
                    new
                    {
                        statusCode = 0,
                        message = emptyTip ?? msg,
                    });
            }
            base.OnActionExecuting(actionContext);
        }

        private void Init(string paraNames, string emptyTip)
        {
            this.paraNames = paraNames;
            this.emptyTip = emptyTip;
        }
    }

2.給需要檢查的Action方法加上檢查特性

        [HttpGet("GetList")]
        [QueryRequired("id", "id不能為空")]
        public ApiResult<List<Testdto>> GetList(string id)
        {
            return new BLL().GetList(id);
        }

3.實現的效果測試