最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

手把手教你AspNetCore WebApi數(shù)據(jù)驗(yàn)證的實(shí)現(xiàn)

 更新時(shí)間:2020年10月12日 09:58:03   作者:深度碼農(nóng)  
這篇文章主要介紹了手把手教你AspNetCore WebApi數(shù)據(jù)驗(yàn)證的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

小明最近又遇到麻煩了,小紅希望對(duì)接接口傳送的數(shù)據(jù)進(jìn)行驗(yàn)證,既然是小紅要求,那小明說(shuō)什么都得滿足呀,這還不簡(jiǎn)單嘛。

傳統(tǒng)驗(yàn)證

[HttpPost]
public async Task<ActionResult<Todo>> PostTodo(Todo todo)
{
  if (string.IsNullOrEmpty(todo.Name))
  {
    return Ok("名稱不能為空");
  }
  context.Todo.Add(todo);
  await context.SaveChangesAsync();

  return CreatedAtAction("GetTodo", new { id = todo.Id }, todo);
}

小明寫(xiě)著寫(xiě)著發(fā)現(xiàn)這樣寫(xiě),很多接口相同得地方都要寫(xiě),使得代碼比較臃腫。

使用模型驗(yàn)證

在參數(shù)模型上打上注解

namespace App001.Models
{
  /// <summary>
  /// 待辦事項(xiàng)
  /// </summary>
  public class Todo
  {
    /// <summary>
    /// ID
    /// </summary>
    public Guid Id { get; set; }
    /// <summary>
    /// 名稱
    /// </summary>
    [Required(ErrorMessage = "名稱不能為空")]
    public string Name { get; set; }
  }
}

Postman測(cè)試Name傳值未空時(shí),則返回:

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "|df184e36-4e11844dfd38a626.",
  "errors": {
    "Name": [
      "名稱不能為空"
    ]
  }
}

注意Web API 控制器具有 [ApiController] 特性,則它們不必檢查ModelState.IsValid。在此情況下,如果模型狀態(tài)無(wú)效,將返回包含錯(cuò)誤詳細(xì)信息的自動(dòng) HTTP 400 響應(yīng)。

內(nèi)置特性

  • [CreditCard]:驗(yàn)證屬性是否具有信用卡格式。
  • [Compare]:驗(yàn)證模型中的兩個(gè)屬性是否匹配。
  • [EmailAddress]:驗(yàn)證屬性是否具有電子郵件格式。
  • [Phone]:驗(yàn)證屬性是否具有電話號(hào)碼格式。
  • [Range]:驗(yàn)證屬性值是否在指定的范圍內(nèi)。
  • [RegularExpression]:驗(yàn)證屬性值是否與指定的正則表達(dá)式匹配。
  • [Required]:驗(yàn)證字段是否不為 null。
  • [StringLength]:驗(yàn)證字符串屬性值是否不超過(guò)指定長(zhǎng)度限制。
  • [Url]:驗(yàn)證屬性是否具有 URL 格式。
  • [Remote]:通過(guò)在服務(wù)器上調(diào)用操作方法來(lái)驗(yàn)證客戶端上的輸入。

Error messages

通過(guò)驗(yàn)證特性可以指定要為無(wú)效輸入顯示的錯(cuò)誤消息。 例如:

[Required(ErrorMessage = "名稱不能為空")]

使用自定義返回消息格式

有兩種方式:

  • 使用自定義過(guò)濾器
  • 使用默認(rèn)模型驗(yàn)證,需要在控制器上面加上【ApiController】。

使用自定義過(guò)濾器

首先,創(chuàng)建ModelValidateActionFilterAttribute過(guò)濾器。

public class ModelValidateActionFilterAttribute : ActionFilterAttribute
{
  public override void OnActionExecuting(ActionExecutingContext context)
  {
    if (!context.ModelState.IsValid)
    {
      //獲取驗(yàn)證失敗的模型字段
      var errors = context.ModelState
        .Where(e => e.Value.Errors.Count > 0)
        .Select(e => e.Value.Errors.First().ErrorMessage)
        .ToList();

      var str = string.Join("|", errors);

      //設(shè)置返回內(nèi)容
      var result = new
      {
        Code = 10000,
        Msg = "未通過(guò)數(shù)據(jù)驗(yàn)證。",
        FullMsg = str
      };

      context.Result = new BadRequestObjectResult(result);
    }

  }
}

然后,Startup.ConfigureServices將過(guò)濾器添加到控制器中并關(guān)閉默認(rèn)模型驗(yàn)證,另外我們還添加了AddNewtonsoftJson。

//關(guān)閉默認(rèn)模型驗(yàn)證
services.Configure<ApiBehaviorOptions>(opt => opt.SuppressModelStateInvalidFilter = true);
services.AddControllers(opt =>
{
  //添加過(guò)濾器
  opt.Filters.Add(typeof(ModelValidateActionFilterAttribute));
}).AddNewtonsoftJson(opt =>
{
  //json字符串大小寫(xiě)原樣輸出
  opt.SerializerSettings.ContractResolver = new DefaultContractResolver();
});

最后,我們看一下返回效果:

{
  "Code": 10000,
  "Msg": "未通過(guò)數(shù)據(jù)驗(yàn)證。",
  "FullMsg": "名稱不能為空。"
}

使用默認(rèn)模型驗(yàn)證

services.Configure<ApiBehaviorOptions>(opt =>
{
  opt.InvalidModelStateResponseFactory = actionContext =>
  {
    //獲取驗(yàn)證失敗的模型字段 
    var errors = actionContext.ModelState
      .Where(e => e.Value.Errors.Count > 0)
      .Select(e => e.Value.Errors.First().ErrorMessage)
      .ToList();

    var str = string.Join("|", errors);

    //設(shè)置返回內(nèi)容
    var result = new
    {
      Code = 10000,
      Msg = "未通過(guò)數(shù)據(jù)驗(yàn)證。",
      FullMsg = str
    };

    return new BadRequestObjectResult(result);
  };
});

小結(jié)

目前為止,小明把數(shù)據(jù)驗(yàn)證也搞定了,是不是so easy!

到此這篇關(guān)于手把手教你AspNetCore WebApi數(shù)據(jù)驗(yàn)證的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)AspNetCore WebApi數(shù)據(jù)驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • .Net?core?Blazor+自定義日志提供器實(shí)現(xiàn)實(shí)時(shí)日志查看器的原理解析

    .Net?core?Blazor+自定義日志提供器實(shí)現(xiàn)實(shí)時(shí)日志查看器的原理解析

    我們經(jīng)常遠(yuǎn)程連接服務(wù)器去查看日志,比較麻煩,如果直接訪問(wèn)項(xiàng)目的某個(gè)頁(yè)面就能實(shí)時(shí)查看日志就比較奈斯了,結(jié)合blazor實(shí)現(xiàn)了基本效果,這篇文章主要介紹了.Net?core?Blazor+自定義日志提供器實(shí)現(xiàn)實(shí)時(shí)日志查看器,需要的朋友可以參考下
    2022-10-10
  • 十分鐘搞定多圖片/文件服務(wù)器

    十分鐘搞定多圖片/文件服務(wù)器

    圖片/文件服務(wù)器,顧名思義就是存文件唄,有的人用阿里云的現(xiàn)有服務(wù),有的把文件Post到文件服務(wù)器,在文件服務(wù)器一端用一個(gè)應(yīng)用程序來(lái)接收并保存,方法各不相同。下面跟著小編一起來(lái)看下吧
    2017-01-01
  • 深入講解.Net Core中的Api版本控制

    深入講解.Net Core中的Api版本控制

    這篇文章主要給大家介紹了關(guān)于.Net Core中Api版本控制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • asp.net中virtual和abstract的區(qū)別分析

    asp.net中virtual和abstract的區(qū)別分析

    這篇文章主要介紹了asp.net中virtual和abstract的區(qū)別,較為詳細(xì)的分析了virtual與abstract的概念與具體用法,并以實(shí)例的形式予以總結(jié)歸納,需要的朋友可以參考下
    2014-10-10
  • 一個(gè)Asp.Net的顯示分頁(yè)方法 附加實(shí)體轉(zhuǎn)換和存儲(chǔ)過(guò)程 帶源碼下載

    一個(gè)Asp.Net的顯示分頁(yè)方法 附加實(shí)體轉(zhuǎn)換和存儲(chǔ)過(guò)程 帶源碼下載

    現(xiàn)在自己寫(xiě)的webform都不用服務(wù)器控件了,所以自己仿照aspnetpager寫(xiě)了一個(gè)精簡(jiǎn)實(shí)用的返回分頁(yè)顯示的html方法,其他話不說(shuō)了,直接上代碼
    2012-10-10
  • .NET?Core中簡(jiǎn)單的郵箱格式校驗(yàn)方式

    .NET?Core中簡(jiǎn)單的郵箱格式校驗(yàn)方式

    這篇文章主要給大家介紹了關(guān)于.NET?Core中簡(jiǎn)單的郵箱格式校驗(yàn)方式的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Asp.net保持頁(yè)面滾動(dòng)條位置(頁(yè)面提交后不變)

    Asp.net保持頁(yè)面滾動(dòng)條位置(頁(yè)面提交后不變)

    ASP.net:保持頁(yè)面中滾動(dòng)條的位置,使得頁(yè)面提交后還在原來(lái)的位置,對(duì)于頁(yè)面中DIV等等的滾動(dòng)條控制,我在看了別人代碼后,寫(xiě)了一個(gè),感興趣的朋友可以參考下哈
    2013-04-04
  • MVC使用MvcPager實(shí)現(xiàn)分頁(yè)效果

    MVC使用MvcPager實(shí)現(xiàn)分頁(yè)效果

    這篇文章主要為大家詳細(xì)介紹了MVC使用MvcPager實(shí)現(xiàn)分頁(yè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • ASP.NET Core Controller與IOC結(jié)合問(wèn)題整理

    ASP.NET Core Controller與IOC結(jié)合問(wèn)題整理

    在本篇文章里小編給大家整理了一篇關(guān)于ASP.NET Core Controller與IOC結(jié)合問(wèn)題整理內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • ASP.NET 2.0中預(yù)設(shè)的cookie

    ASP.NET 2.0中預(yù)設(shè)的cookie

    ASP.NET 2.0中預(yù)設(shè)的cookie...
    2006-09-09

最新評(píng)論

宁武县| 泸西县| 舞阳县| 郑州市| 六枝特区| 南充市| 大足县| 天峻县| 佳木斯市| 滦平县| 旌德县| 沙河市| 察隅县| 华坪县| 顺昌县| 日照市| 商都县| 深州市| 邮箱| 微博| 益阳市| 湘乡市| 临清市| 衢州市| 石泉县| 宿州市| 南宫市| 鄯善县| 布拖县| 大石桥市| 黑山县| 延吉市| 尖扎县| 珠海市| 阿图什市| 嘉鱼县| 仁化县| 原平市| 尉犁县| 锦州市| 邹平县|