真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么用ASP.NET實現(xiàn)參數(shù)有效性驗證

本篇內(nèi)容介紹了“怎么用ASP.NET實現(xiàn)參數(shù)有效性驗證”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

目前成都創(chuàng)新互聯(lián)公司已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計、美蘭網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

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

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

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

使用數(shù)據(jù)注解

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

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 命名空間中,請看Task application service 的實現(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ù)驗證性代碼(指對Description屬性的驗證)因為ABP會自動去檢驗數(shù)據(jù)的有效性。ABP也會檢驗輸入數(shù)據(jù)是否為null。如果為空則會拋出AbpValidationException 異常。所以你不需要寫檢驗數(shù)據(jù)是否為null值的代碼。如果有任何屬性的輸入數(shù)據(jù)是無效的它也會拋出相同的異常。

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

自定義檢驗

如果數(shù)據(jù)注解的方式不能滿足你的需求,你可以實現(xiàn)ICustomValidate接口,請看下面示例:

public class CreateTaskInput : IInputDto, ICustomValidate
{
public int? AssignedPersonId { get; set; }

public bool SendEmailToAssignedPerson { get; set; }

[Required]
public string Description { get; set; }

public void AddValidationErrors(List results)
{
if (SendEmailToAssignedPerson && (!AssignedPersonId.HasValue || AssignedPersonId.Value <= 0))
{
results.Add(new ValidationResult("AssignedPersonId must be set if SendEmailToAssignedPerson is true!"));
}
}
}

ICustomValidate 接口聲明了一個可被實現(xiàn)的AddValidationErrors方法。這里我們有一個叫做 SendEmailToAssignedPerson 的屬性。如果該屬性是真,AssignedPersonId 屬性會被檢驗是否有效,否則該屬性可以為空。如果有驗證錯誤,我們必須添加把這些驗證結(jié)果添加到結(jié)果集合中。(就是將ValidationResult 添加到results)

設(shè)置缺省值

在檢驗數(shù)據(jù)有效性后,我們需要執(zhí)行一個額外的操作來整理DTO參數(shù)。ABP定義了一個IShouldNormalize接口,這個接口聲明了一個 Normalize的方法。如果你實現(xiàn)了這個接口,在檢驗數(shù)據(jù)有效性后,Normalize方法會被調(diào)用。假設(shè)我們的DTO需要一個排序方向的數(shù)據(jù)。如果這個Sorting屬性沒有被提供數(shù)據(jù),那么在Normalize我們可以給Sorting設(shè)置一個缺省值。

public class GetTasksInput : IInputDto, IShouldNormalize
{
public string Sorting { get; set; }

public void Normalize()
{
if (string.IsNullOrWhiteSpace(Sorting))
{
Sorting = "Name ASC";
}
}
}

“怎么用ASP.NET實現(xiàn)參數(shù)有效性驗證”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


網(wǎng)站欄目:怎么用ASP.NET實現(xiàn)參數(shù)有效性驗證
本文鏈接:http://weahome.cn/article/pdeipj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部