我将编写一个验证组件以在不同的项目中使用它。我并不真正熟悉 Enterprise Library VAB、Fluent、CuttingEdge.Conditions等许多其他验证框架,但是我没有时间与所有这些框架一起工作,看看哪个更适合我的目的。
我希望这个组件为我提供 2 个不同的功能:
首先,我想要一些验证器,如 EmailValidator、StringLengthValidator、MyCustomValidator 等,我可以在代码中随时使用它们,如下所示:
public class EmailValidator : RegexValidator // or StringValidator or whatever!
{
public EmailValidator() : base("emailRegexHere")
{
}
public bool override DoValidate(string value)
{
return base.DoValidate(value);
}
}
...
public void MyMethod(string email)
{
EmailValidator validator = new EmailValidator();
if(!validator.Validate(email))
throw new NotValidatedException("email is invalid.");
...
}
其次,我需要通过将诸如 DataAnnotations 之类的东西应用于我想要的任何方法参数来验证参数,而无需任何额外的编码。我知道的一种可能的方法是使用PostSharp编写 Aspects在方法开始的地方注入代码(OnMethodEntry)。我已经用 Postsharp 完成了 Logging,效果很好。
微软还引入了 IParameterInspector 来在 WCF 中执行输入验证,它提供了两种方法 BeforCall 和 AfterCall,但我认为它只适用于 WCF。
最后,我需要在我的 WCF 或 WebService 中进行验证,如下所示:
[System.Web.Script.Services.ScriptService]
public class MyServiceClass : System.Web.Services.WebService
{
[Aspects.Validate]
[WebMethod(EnableSession = true)]
public string SubmitComment([Validation.Required]string content,[Validation.Guid] string userId,[Validation.Required] [Validation.Name]string name, [Validation.Email]string email, string ipAddress)
{
...
}
}
注意:这只是演示我需要的行为的示例代码,非常感谢任何其他建议。将 Validation.* 注释更改为像 ValidateParam(typeof(EmailValidator)) 这样的注释也是一个好主意吗?
提前致谢