国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

詳解ABP框架的參數(shù)有效性驗(yàn)證和權(quán)限驗(yàn)證

2024-07-10 12:47:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

參數(shù)有效性驗(yàn)證
應(yīng)用程序的輸入數(shù)據(jù)首先應(yīng)該被檢驗(yàn)是否有效。輸入的數(shù)據(jù)能被用戶或其他應(yīng)用程序提交。在Web應(yīng)用中,通常進(jìn)行2次數(shù)據(jù)有效性檢驗(yàn):包括客戶端檢驗(yàn)和服務(wù)端檢驗(yàn)。客戶端的檢驗(yàn)主要是使用戶有一個(gè)好的用戶體驗(yàn)。 首先最好是在客戶端檢驗(yàn)其表單輸入的有效性并且展示給客戶端的那些字段輸入是無(wú)效的。但是,服務(wù)器端的校驗(yàn)是更關(guān)鍵和不可缺失的(不要只做客戶端檢驗(yàn)而不做服務(wù)器端檢驗(yàn))。

服務(wù)器端的檢驗(yàn)通常是被應(yīng)用服務(wù)(層)執(zhí)行,應(yīng)用服務(wù)(層)中的方法首先檢驗(yàn)數(shù)據(jù)的有效性,然后才使用這些通過(guò)驗(yàn)證的數(shù)據(jù)。ABP的基礎(chǔ)設(shè)施提供了自動(dòng)檢驗(yàn)輸入數(shù)據(jù)有效性的方法。

應(yīng)用服務(wù)(層)方法得到一個(gè)數(shù)據(jù)傳輸對(duì)象(DTO)作為輸入。ABP有一個(gè)IValidate的接口,DTO通過(guò)實(shí)現(xiàn)這個(gè)接口能夠檢驗(yàn)數(shù)據(jù)的有效性。由于IInputDto擴(kuò)展自IValidate,所以你可以直接實(shí)現(xiàn)IInputDto 接口來(lái)對(duì)數(shù)據(jù)傳輸對(duì)象(DTO)檢驗(yàn)其有效性。

使用數(shù)據(jù)注解
ABP提供數(shù)據(jù)注解的特性。假設(shè)我們正在開發(fā)一個(gè)創(chuàng)建任務(wù)的應(yīng)用服務(wù)并且得到了一個(gè)輸入,請(qǐng)看下面示例:

public class CreateTaskInput : IInputDto{  public int? AssignedPersonId { get; set; }  [Required]  public string Description { get; set; }}

在這里,Description 屬性被標(biāo)記為 Required。AssignedPersonId 是可選的。在 System.ComponentModel.DataAnnotations 命名空間中,還有很多這樣的特性 ( 例如: MaxLength, MinLength, RegularExpression 等等 )。

在System.ComponentModel.DataAnnotations 命名空間中,請(qǐng)看Task application service 的實(shí)現(xiàn)

 

public class TaskAppService : ITaskAppService{  private readonly ITaskRepository _taskRepository;  private readonly IPersonRepository _personRepository;  public TaskAppService(ITaskRepository taskRepository, IPersonRepository personRepository)  {    _taskRepository = taskRepository;    _personRepository = personRepository;  }  public void CreateTask(CreateTaskInput input)  {    var task = new Task { Description = input.Description };    if (input.AssignedPersonId.HasValue)    {      task.AssignedPerson = _personRepository.Load(input.AssignedPersonId.Value);    }    _taskRepository.Insert(task);  }}


正如你所看到的,這里沒有寫任何的數(shù)據(jù)驗(yàn)證性代碼(指對(duì)Description屬性的驗(yàn)證)因?yàn)锳BP會(huì)自動(dòng)去檢驗(yàn)數(shù)據(jù)的有效性。ABP也會(huì)檢驗(yàn)輸入數(shù)據(jù)是否為null。如果為空則會(huì)拋出AbpValidationException 異常。所以你不需要寫檢驗(yàn)數(shù)據(jù)是否為null值的代碼。如果有任何屬性的輸入數(shù)據(jù)是無(wú)效的它也會(huì)拋出相同的異常。

這個(gè)機(jī)制近似于 ASP.NET MVC 的驗(yàn)證功能,注意:這里的應(yīng)用服務(wù)類不是繼承自Controller,它是用在Web應(yīng)用的一個(gè)普通類。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新巴尔虎左旗| 古交市| 高唐县| 株洲县| 屏边| 从江县| 泽普县| 盐边县| 湖北省| 仁布县| 慈利县| 甘南县| 阿拉善盟| 汕尾市| 镇安县| 磴口县| 西峡县| 阆中市| 丽江市| 安龙县| 临猗县| 瓦房店市| 昭平县| 那坡县| 灌南县| 连云港市| 淮南市| 台湾省| 饶平县| 三江| 灵宝市| 太仆寺旗| 兰考县| 清涧县| 绍兴市| 汶上县| 南和县| 巴楚县| 洪雅县| 十堰市| 竹北市|