我有一类客户。我想对它进行一些验证。 例如CustGuidId不是Guid.Empty,CustName不是NULL(必需)。
public class Customer
{
public int CustId;
public string CustName;
public Guid CustGuid;
public Guid[] OrderGuids;
}
我有这样的客户集合。所以我最终添加了这样的代码,这使它看起来很难看。
public class BatchError
{
public int Index;
public string ErrorCode;
public string ErrorMessage;
}
public void GenerateValidationErrors(List<Customer> customers, out List<BatchError> batchErrors)
{
int rowNum = 0;
batchErrors = new List<BatchError>(customers.Count);
foreach (var customer in customers)
{
rowNum ++;
Guid customerGuidParsed;
if(!Guid.TryParse(customer.CustGuid.ToString(), out customerGuidParsed))
{
batchErrors.Add(new BatchError { Index = rowNum, ErrorCode = "CustomerGuidcannotBeNull", ErrorMessage = "Customer guid cannot be null." });
}
if (string.IsNullOrEmpty(customer.CustName))
{
batchErrors.Add(new BatchError { Index = rowNum, ErrorCode = "CustomerNamecannotBeEmpty", ErrorMessage = "Customer Name cannot be empty." });
}
}
}
我们可以编写单独的验证器类,如GuidValidator,StringValidator。 并创建代表数组&amp;链接他们的调用?
(Customer c) => new GuidValidator(c.CustGuid.toString()),
(Customer c) => new StringValidator(c.CustName.toString())
但是哪种设计模式最适合这种情况?
还有其他方法可以在WCF中添加验证吗?
答案 0 :(得分:0)
有很多方法可以进行验证。在采取任何行动之前,我更愿意验证DataContract
。
它也可以在许多方面完成:
DatamemberAttribute
有很多属性。其中之一是
IsRequired
,它控制架构的minOccurs属性
元件。默认值为false。您可以像使用它一样使用它:
[DataContract(Name ="Place", Namespace ="")]
public class DataContractExample
{
[DataMember(IsRequired=true)]
public string DataMemberExample;
}
有关详细信息,请参阅MSDN上的DataMemberAttribute Class。
最简单的方法是验证属性,如:
[DataContract]
public class Customer
{
[DataMember]
public string CustName
{
get
{
return this._custName;
}
set
{
if(string.IsNullOrEmpty(value))
throw new MyValidationException();
else
this._custName=value;
}
}
}
另一种方法是使用 Microsoft Enterprise Library 。为了验证请求消息的属性,您只需要在[ValidationBehavior]
的下一个(或之前)和[ServiceContract]
向服务界面添加[FaultContract(typeof(ValidationFault))]
属性关于方法声明。 ValidationBehaviorAttribute
和ValidationFault
类在Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF
程序集中定义,并且是企业库4.1的验证应用程序块的一部分,更具体地说,是WCF集成模块的验证应用程序块的一部分。有关详细信息,请参阅:http://weblogs.asp.net/ricardoperes/validation-of-wcf-requests-with-the-enterprise-library-validation-block
最后,还有一个解决方案是使用来自http://wcfdataannotations.codeplex.com/的WCF数据注释。使用此功能,您可以使用以下验证:
[DataMember]
[Required]
[StringLength(500, MinimumLength = 5)]
public string Description{ get; set; }
选择满足您要求的产品。欢呼声。