.net core 中api 模型驗證

来源:https://www.cnblogs.com/WNpursue/archive/2020/01/22/12227956.html

AddControllers/AddMvc方法允許添加自定義ActionFilterAttribute進行過濾 文檔中這麼定義Filter: 可以創建自定義篩選器,用於處理橫切關註點。 橫切關註點的示例包括錯誤處理、緩存、配置、授權和日誌記錄。 篩選器可以避免複製代碼。 例如,錯誤處理異常篩選器可以 ...


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
    });
}

.net core 中 api 模型驗證

starp.cs

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

添加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; }
    }

您的分享是我們最大的動力!

更多相關文章
  • 需求 基於SSM實現一個垃圾分類查詢管理系統, 用戶可以根據自定義查詢分類信息, 管理員可以對分類信息, 垃圾詳情信息進行增刪改查的管理 運行環境 jdk1.8,tomcat8.5,mysql5.6,EclispseEE/Idea 項目技術 spring, springmvc, mybatis, b ...
  • 一、下載CMS源碼 https://www.yzmcms.com/xiazai 下載完成後得到一個這樣的壓縮包 接著下載PHPStudy,安裝只要一直點下一步就可以了 安裝完成後打開,如下圖啟動兩個地方 接著解壓一開始下載的那個PHPCMS壓縮包,把文件放到PHPStudy的制定目錄下,如下圖 最後 ...
  • SpringMVC 視圖解析 請求處理方法(controller方法)執行完成後,最終返回一個 ModelAndView 對象,即使出現異常也會返回一個 ModelAndView 對象。對於那些返回 String,View 或 ModeMap 等類型的處理方法,Spring MVC 也會在內部將它們 ...
  • 本隨筆中記載了博主在學習Python的字元串與編碼時,不太熟悉的內容。 ...
  • Python 官方文檔 PEP484(類型提示)的譯文,本人原創。 ...
  • 本隨筆中記載了博主在學習Python的變數與輸出時,不太熟悉的內容。 ...
  • 將自己定義的方法,變數存放在文件中,為一些腳本或者互動式的解釋器實例使用,這個文件稱為模塊。 細說的話,模塊可以分為四個通用類別: 1 使用python編寫的.py文件(自定義模塊) 2 已被編譯為共用庫或DLL的C或C++擴展 3 把一系列模塊組織到一起的文件夾(註:文件夾下有一個__init__ ...
  • MyBatis Generator(MBG)的使用 MBG可以根據數據表生成對應的model、xml映射文件、mapper介面,只是簡單的生成,還需要根據需求修改。 1、下載jar包 https://github.com/mybatis/generator/releases 解壓後有3個jar包,只 ...
一周排行
  • 比如要拆分“呵呵呵90909086676喝喝999”,下麵當type=0返回的是中文字元串“呵呵呵,喝喝”,type=1返回的是數字字元串“90909086676,999”, private string GetStrings(string str,int type=0) { IList<strin ...
  • Swagger一個優秀的Api介面文檔生成工具。Swagger可以可以動態生成Api介面文檔,有效的降低前後端人員關於Api介面的溝通成本,促進項目高效開發。 1、使用NuGet安裝最新的包:Swashbuckle.AspNetCore。 2、編輯項目文件(NetCoreTemplate.Web.c ...
  • 2020 年 7 月 30 日, 由.NET基金會和微軟 將舉辦一個線上和為期一天的活動,包括 微軟 .NET 團隊的演講者以及社區的演講者。本次線上大會 專註.NET框架構建微服務,演講者分享構建和部署雲原生應用程式的最佳實踐、模式、提示和技巧。有關更多信息和隨時瞭解情況:https://focu... ...
  • #abp框架Excel導出——基於vue #1.技術棧 ##1.1 前端採用vue,官方提供 UI套件用的是iview ##1.2 後臺是abp——aspnetboilerplate 即abp v1,https://github.com/aspnetboilerplate/aspnetboilerp ...
  • 前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 作者:碧茂大數據 PS:如有需要Python學習資料的小伙伴可以加下方的群去找免費管理員領取 input()輸入 Python提供了 input() 內置函數從標準輸入讀入一 ...
  • 從12年到20年,python以肉眼可見的趨勢超過了java,成為了當今It界人人皆知的編程語言。 python為什麼這麼火? 網路編程語言搜索指數 適合初學者 Python具有語法簡單、語句清晰的特點,這就讓初學者在學習階段可以把精力集中在編程對象和思維方法上。 大佬都在用 Google,YouT ...
  • 在社會上存在一種普遍的對培訓機構的學生一種歧視的現象,具體表現在,比如:當你去公司面試的時候,一旦你說了你是培訓機構出來的,那麼基本上你就涼了,那麼你瞞著不說,然後又通過了面試成功入職,但是以後一旦在公司被髮現有培訓經歷,可能會面臨被降薪,甚至被辭退,培訓機構出來的學生,在用人單位眼裡就是能力低下的 ...
  • from typing import List# 這道題看了大佬寫的代碼,經過自己的理解寫出來了。# 從最外圍的四周找有沒有為O的,如果有的話就進入深搜函數,然後深搜遍歷# 判斷上下左右的位置是否為Oclass Solution: def solve(self, board: List[List[s ...
  • import requests; import re; import os; # 1.請求網頁 header = { "user-agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, li ...
  • import requests; import re; import os; import parsel; 1.請求網頁 header = { "user-agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537. ...