Tôi sẽ viết một thành phần xác thực để sử dụng nó trên các dự án khác nhau. Tôi không thực sự quen thuộc với bất kỳ khung công tác xác thực nào như Thư viện doanh nghiệp VAB, Fluent, CuttingEdge.Conditions và rất nhiều người khác, tuy nhiên tôi không có thời gian để làm việc với tất cả chúng để xem mục nào tốt hơn cho mục đích của tôi.Cách tốt nhất để xác thực giá trị tham số của phương thức WCF và WebService
Tôi muốn thành phần này để cung cấp 2 chức năng khác nhau cho tôi:
Đầu tiên, tôi muốn có một số xác nhận như EmailValidator, StringLengthValidator, MyCustomValidator và như vậy, mà tôi có thể sử dụng chúng bất cứ khi nào tôi muốn trong mã, như dưới đây:
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.");
...
}
Second, tôi cần phải xác nhận thông số bằng cách áp dụng một cái gì đó giống như DataAnnotations cho bất kỳ tham số phương pháp mà tôi muốn mà không bất kỳ mã hóa thêm. Một cách có thể tôi biết là viết khía cạnh bằng cách sử dụng PostSharp để chèn mã nơi phương thức bắt đầu (OnMethodEntry). Tôi đã thực hiện Đăng nhập với Postsharp và nó hoạt động rất tốt.
Ngoài ra Microsoft giới thiệu IParameterInspector đến Perform Input Validation in WCF cung cấp 2 phương thức BeforCall và AfterCall, nhưng tôi nghĩ nó chỉ hoạt động cho WCF.
Để kết thúc, tôi cần phải làm xác nhận trong WCF hoặc WebService của tôi như thế này:
[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)
{
...
}
}
Note: đây chỉ là một số mẫu mã để chứng minh hành vi mà tôi cần, bất cứ đề nghị khác là được đánh giá cao. Ngoài ra, ý tưởng hay là Validation. * Chú thích được thay đổi thành một chú thích như ValidateParam (typeof (EmailValidator))?
Cảm ơn trước
Đó là chính xác những gì tôi đã có trong tâm trí, và tôi gần như hoàn thành mã hóa. Tôi tìm thấy [post] này (http://badecho.com/2011/11/validating-method-parameters-with-postsharp) bởi Matt Weber đó là hữu ích (phần đầu tiên). Về việc đặt mã xác nhận vào các thuộc tính, tôi đã thêm một phương thức giao diện 'GetValidator', vì vậy mỗi thuộc tính trả về trình xác nhận hợp lệ của nó. Vấn đề tôi gặp phải đối với các trình xác nhận chung như 'RangeValidator', vì C# không hỗ trợ các thuộc tính chung, tôi phải viết quá tải hàm dựng cho mỗi kiểu như int, double, datetime ... – Ashkan
cảm ơn bằng cách này! câu trả lời của bạn làm tôi cảm thấy tốt hơn về cách tiếp cận này. Ngoài ra tôi đang viết trình xác thực của mình với FluentValidation. Tôi nghĩ nó khá tốt. – Ashkan