Zamierzam napisać składnik sprawdzania poprawności, aby użyć go w różnych projektach. Nie jestem obeznany z żadnymi systemami sprawdzania poprawności, takimi jak Enterprise Library VAB, Fluent, CuttingEdge.Conditions i wieloma innymi, jednak nie mam czasu, aby pracować z nimi wszystkimi, aby zobaczyć, który jest lepszy dla mojego celu.Najlepszy sposób sprawdzania wartości parametrów metody WCF i WebService
Chcę ten składnik w celu zapewnienia 2 różne funkcje dla mnie:
Pierwszy, chcę mieć pewne walidatory jak EmailValidator, StringLengthValidator, MyCustomValidator i tak dalej, że można z nich korzystać kiedy chcę w kod jak poniżej:
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.");
...
}
II, muszę zweryfikować parametry stosując coś podobnego DataAnnotations do dowolnego parametru metody, które chcę bez dodatkowego kodowania. Jednym z możliwych sposobów, jaki znam jest pisanie Aspektów przy użyciu PostSharp do wstrzykiwania kodu, w którym rozpoczyna się metoda (OnMethodEntry). Zrobiłem Logging with Postsharp i działa świetnie.
Również Microsoft wprowadza IParameterInspector do Perform Input Validation in WCF, które zapewniają 2 metody BeforCall i AfterCall, ale myślę, że działa tylko dla WCF.
omotać, muszę zrobić sprawdzania poprawności w moim WCF lub WebService tak:
[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)
{
...
}
}
Uwaga: to jest tylko przykładowy kod do wykazania zachowania, które muszę, jakieś inne sugestie to dobrze docenione. Czy dobrze jest, aby adnotacje sprawdzania poprawności * * zostały zmienione na jedną adnotację, taką jak ValidateParam (typeof (EmailValidator))?
góry dzięki
Dokładnie to miałem na myśli i prawie skończyłem kodowanie. Znalazłem ten [post] (http://badecho.com/2011/11/validating-method-parameters-with-postsharp) autorstwa Matta Webera, który był pomocny (pierwsza część). Wprowadzając kod sprawdzania poprawności w atrybutach, dodałem metodę interfejsu 'GetValidator', więc każdy atrybut zwraca odpowiedni weryfikator. Problem, przed którym stoję, dotyczy generycznych sprawdzania poprawności, takich jak 'RangeValidator', ponieważ C# nie obsługuje ogólnych atrybutów, muszę napisać przeciążenie konstruktora dla każdego typu, takiego jak int, double, datetime ... – Ashkan
dzięki przy okazji! Twoja odpowiedź sprawiła, że poczułem się lepiej w związku z tym podejściem. Również piszę moje walidatory za pomocą FluentValidation. Myślę, że to całkiem nieźle. – Ashkan