.net core 中api 模型驗證


AddControllers/AddMvc方法允許添加自定義ActionFilterAttribute進行過濾

文檔中這么定義Filter:
可以創建自定義篩選器,用於處理橫切關注點。 橫切關注點的示例包括錯誤處理、緩存、配置、授權和日志記錄。 篩選器可以避免復制代碼。 例如,錯誤處理異常篩選器可以合並錯誤處理。
通過不同的接口定義,篩選器同時支持同步和異步實現。
同步篩選器在其管道階段之前和之后運行代碼。 例如,OnActionExecuting 在調用操作方法之前調用。 OnActionExecuted 在操作方法返回之后調用。
添加自定義模型驗證

自定義篩選器依賴注入方式

public void ConfigureServices(IServiceCollection services)
{
   // Add service filters.
   services.AddScoped<AddHeaderResultServiceFilter>();
   services.AddScoped<SampleActionFilterAttribute>();

   services.AddControllersWithViews(options =>
   {
        options.Filters.Add(new AddHeaderAttribute("GlobalAddHeader",
           "Result filter added to MvcOptions.Filters"));         // An instance
        options.Filters.Add(typeof(MySampleActionFilter));         // By type
        options.Filters.Add(new SampleGlobalActionFilter());       // An instance
    })
    .ConfigureApiBehaviorOptions(options =>
    {
        options.SuppressModelStateInvalidFilter = true;
    });
}

.net core 中 api 模型驗證

starp.cs

            services
                .AddControllers(options =>
                {
                    options.Filters.Add(new ModelActionFilter());
                    options.Filters.AddService<ExceptionFilter>();
                    options.MaxModelValidationErrors = 50;
                    options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(
                        _ => "該字段不可為空。");
                })
                .ConfigureApiBehaviorOptions(options =>
                {
                    options.SuppressModelStateInvalidFilter = true;
                })

添加ModelActionFilter

    public class ModelActionFilter : ActionFilterAttribute, IActionFilter
    {
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            if (!context.ModelState.IsValid)
            {
                var errorResults = new List<ErrorResultDto>();
                foreach (var item in context.ModelState)
                {
                    var result = new ErrorResultDto
                    {
                        Field = item.Key,
                        Msg = "",
                    };
                    foreach (var error in item.Value.Errors)
                    {
                        if (!string.IsNullOrEmpty(result.Msg))
                        {
                            result.Msg += '|';
                        }
                        result.Msg += error.ErrorMessage;
                    }
                    errorResults.Add(result);
                }
                context.Result = new JsonResult(Result.FromCode(ResultCode.InvalidData, errorResults));
            }
        }
    }

    public class ErrorResultDto
    {
        /// <summary>
        /// 參數領域
        /// </summary>
        public string Field { get; set; }

        /// <summary>
        /// 錯誤信息
        /// </summary>
        public string Msg { get; set; }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM