2011-10-18 7 views
5

Tôi có một thiết lập trang web ASP.NET MVC3 sử dụng xác thực thông thạo và ninject. Mã xác thực đang hoạt động. Tuy nhiên, tôi thiết lập một điểm break trong constructor lớp xác nhận và tôi nhận thấy rằng khi tôi yêu cầu xem của tôi sử dụng xác nhận, hàm tạo được nhấn nhiều lần. Dựa trên thử nghiệm rất cơ bản, có vẻ như số lần hàm tạo được nhấn bằng số lượng thuộc tính tồn tại trên đối tượng. Có ai khác đi qua một cái gì đó tương tự? Hoặc ai đó có thể hiểu rõ hơn về cách xác thực kiểu này hoạt động như thế nào sau hậu trường? -Cảm ơnASP.NET MVC3 Fluent Validation Constructor nhấn nhiều lần theo yêu cầu

Dưới đây là các nhà xây dựng ...

public class PersonValidator : AbstractValidator<Person> { 
    public PersonValidator() { 
     RuleFor(x => x.Id).NotNull(); 
     RuleFor(x => x.Name).Length(0, 10); 
     RuleFor(x => x.Email).EmailAddress(); 
     RuleFor(x => x.Age).InclusiveBetween(18, 60); 
    } 
} 

Dưới đây là các thư viện/nguồn lực mà tôi đang sử dụng (tôi chỉ có các gói NuGet và cấu hình tất cả mọi thứ dựa trên các thông tin từ hai liên kết dưới đây) :

http://fluentvalidation.codeplex.com/wikipage?title=mvc https://github.com/ninject/ninject.web.mvc.fluentvalidation

+0

Câu hỏi thú vị, bạn có biết chính xác điều gì đang xảy ra khi bạn gọi (x => x.Id) không? Tôi vẫn còn mới để biểu thức LINQ nhưng tôi đoán điều này có thể có một cái gì đó để làm với vấn đề của bạn –

+0

@CodeRush 'RuleFor (x => x.Id)' có nghĩa là để thực hiện một quy tắc cho 'Id' tài sản của' Người x' . @Zoran bạn thiết lập trình xác thực như thế nào? – shuniar

+0

Tôi quen thuộc với Linq và tôi cũng sử dụng api thông thạo với EF Code First. @shuniar - Tôi đã thêm các liên kết đến các trang web mà tôi đã sử dụng để định cấu hình trang web của mình. Tôi không thể thực sự đi qua tất cả các bước, nhưng tôi có thể nói rằng tôi đã có được xác nhận để làm việc bằng cách làm theo các bước. Tôi chỉ muốn biết tại sao mã đó bị tấn công rất nhiều lần. Nó liên quan đến tôi một chút. :) – Zoran

Trả lời

4

tôi đã tìm ra cách để ngăn chặn vấn đề này. Mặc dù điều này giải quyết vấn đề của tôi, tôi muốn đầu vào từ những người khác về việc liệu có bất kỳ hậu quả nào trong việc thực hiện điều này không?

Vì vậy, trên liên kết thứ hai, bạn sẽ thấy hướng dẫn về cách thiết lập Ninject.

Ở bước thứ hai, bạn cần áp dụng phương thức mở rộng "InRequestScope()". Sau đó, hàm tạo sẽ chỉ được nhấn một lần cho mỗi yêu cầu http sử dụng trình xác thực của bạn. Điều đó rõ ràng có nghĩa là chỉ có một cá thể của đối tượng validator được tạo ra theo yêu cầu http, điều này có ý nghĩa với tôi. Tôi không biết liệu có bất kỳ hậu quả nào khi sử dụng giải pháp này không?

Bind(match.InterfaceType).To(match.ValidatorType).InRequestScope();