激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 手把手教你AspNetCore WebApi數據驗證的實現

手把手教你AspNetCore WebApi數據驗證的實現

2021-12-03 16:15深度碼農 ASP.NET教程

這篇文章主要介紹了手把手教你AspNetCore WebApi數據驗證的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

小明最近又遇到麻煩了,小紅希望對接接口傳送的數據進行驗證,既然是小紅要求,那小明說什么都得滿足呀,這還不簡單嘛。

傳統驗證

?
1
2
3
4
5
6
7
8
9
10
11
12
[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);
}

小明寫著寫著發現這樣寫,很多接口相同得地方都要寫,使得代碼比較臃腫。

使用模型驗證

在參數模型上打上注解

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace App001.Models
{
  /// <summary>
  /// 待辦事項
  /// </summary>
  public class Todo
  {
    /// <summary>
    /// ID
    /// </summary>
    public Guid Id { get; set; }
    /// <summary>
    /// 名稱
    /// </summary>
    [Required(ErrorMessage = "名稱不能為空")]
    public string Name { get; set; }
  }
}

Postman測試Name傳值未空時,則返回:

?
1
2
3
4
5
6
7
8
9
10
11
{
  "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。在此情況下,如果模型狀態無效,將返回包含錯誤詳細信息的自動 HTTP 400 響應。

內置特性

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

Error messages

通過驗證特性可以指定要為無效輸入顯示的錯誤消息。 例如:

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

使用自定義返回消息格式

有兩種方式:

  • 使用自定義過濾器
  • 使用默認模型驗證,需要在控制器上面加上【ApiController】。

使用自定義過濾器

首先,創建ModelValidateActionFilterAttribute過濾器。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class ModelValidateActionFilterAttribute : ActionFilterAttribute
{
  public override void OnActionExecuting(ActionExecutingContext context)
  {
    if (!context.ModelState.IsValid)
    {
      //獲取驗證失敗的模型字段
      var errors = context.ModelState
        .Where(e => e.Value.Errors.Count > 0)
        .Select(e => e.Value.Errors.First().ErrorMessage)
        .ToList();
 
      var str = string.Join("|", errors);
 
      //設置返回內容
      var result = new
      {
        Code = 10000,
        Msg = "未通過數據驗證。",
        FullMsg = str
      };
 
      context.Result = new BadRequestObjectResult(result);
    }
 
  }
}

然后,Startup.ConfigureServices將過濾器添加到控制器中并關閉默認模型驗證,另外我們還添加了AddNewtonsoftJson。

?
1
2
3
4
5
6
7
8
9
10
11
//關閉默認模型驗證
services.Configure<ApiBehaviorOptions>(opt => opt.SuppressModelStateInvalidFilter = true);
services.AddControllers(opt =>
{
  //添加過濾器
  opt.Filters.Add(typeof(ModelValidateActionFilterAttribute));
}).AddNewtonsoftJson(opt =>
{
  //json字符串大小寫原樣輸出
  opt.SerializerSettings.ContractResolver = new DefaultContractResolver();
});

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

?
1
2
3
4
5
{
  "Code": 10000,
  "Msg": "未通過數據驗證。",
  "FullMsg": "名稱不能為空。"
}

使用默認模型驗證

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
services.Configure<ApiBehaviorOptions>(opt =>
{
  opt.InvalidModelStateResponseFactory = actionContext =>
  {
    //獲取驗證失敗的模型字段
    var errors = actionContext.ModelState
      .Where(e => e.Value.Errors.Count > 0)
      .Select(e => e.Value.Errors.First().ErrorMessage)
      .ToList();
 
    var str = string.Join("|", errors);
 
    //設置返回內容
    var result = new
    {
      Code = 10000,
      Msg = "未通過數據驗證。",
      FullMsg = str
    };
 
    return new BadRequestObjectResult(result);
  };
});

小結

目前為止,小明把數據驗證也搞定了,是不是so easy!

到此這篇關于手把手教你AspNetCore WebApi數據驗證的實現的文章就介紹到這了,更多相關AspNetCore WebApi數據驗證內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/zcqiand/p/13795675.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 免费嗨片首页中文字幕 | 中文字幕偷拍 | 日本成人二区 | 国产视频99 | 成人毛片100部免费观看 | 欧美成人免费香蕉 | 一级做受毛片免费大片 | 一区二区三区在线观看国产 | 青青国产在线视频 | 女人解衣喂奶电影 | 久久久久夜色精品国产老牛91 | 中文字幕欧美日韩 | 日本在线视频一区二区三区 | 欧美日韩成人一区二区 | 高清成人在线 | 亚洲电影免费观看国语版 | 久久中出| 精品一区二区久久久久久久网精 | 毛片大全免费 | 日本黄色免费播放 | 羞羞视频免费视频欧美 | h视频免费在线观看 | 国产孕妇孕交大片孕 | 亚洲成人午夜精品 | 九九热免费在线观看 | 国产精品久久久久久久av | 鲁人人人鲁人人鲁精品 | 一本色道久久综合亚洲精品图片 | 国产成人精品视频在线 | 性欧美极品xxxx欧美一区二区 | 欧美一级毛片欧美一级成人毛片 | 91免费影视| av在线观 | a黄在线观看 | 午夜视频亚洲 | 毛片在哪看 | 久久99久久99免费视频 | 天使萌一区二区三区免费观看 | 午夜精品老牛av一区二区三区 | av噜噜噜噜 | 午夜精品福利在线观看 |