netcore webapi對請求query引數的檢查特性封裝
阿新 • • 發佈:2021-01-01
技術標籤: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.實現的效果測試