2012-05-09 19 views
5

Nancy chuyển chuỗi truy vấn của tôi và các giá trị biểu mẫu cho trình xử lý của tôi qua biến số dynamic. Ví dụ bên dưới hiển thị các giá trị biểu mẫu được chuyển đến trình xử lý POST thông qua yêu cầu Nancy, ví dụ: Request.Form.xxx.NancyFX: Làm cách nào để kiểm tra xem các giá trị chuỗi truy vấn/biểu mẫu đã được chuyển chính xác đến trình xử lý của tôi chưa?

Handler

Post["/"] = _ => 
    { 
     var userId = (string) Request.Form.userid; 
     if (userId.IsEmpty()) return HttpStatusCode.UnprocessableEntity; 
     return HttpStatusCode.OK; 
    }; 

Bạn có thể thấy rằng tôi đúc các userid thành một chuỗi và sau đó sử dụng một phương pháp mở rộng chuỗi để kiểm tra nếu giá trị là null hoặc chuỗi rỗng (tương đương với string.IsNullOrEmpty()).

Điều tôi muốn là có phương pháp tiện ích mở rộng trên loại động nên tôi có thể thực hiện kiểm tra độ chính xác của mình trước khi thực hiện bất kỳ điều gì khác. Tôi muốn có mã như sau:

if(Request.Form.userid.IsEmpty()) return HttpStatusCode.UnprocessableEntity; 

Tuy nhiên, bạn không thể có phương thức mở rộng cho dynamic loại. Ngoài ra, bạn không thể kiểm tra sự hiện diện của một thuộc tính thông qua sự phản chiếu. Chào mừng bạn đến với DLR.

Câu hỏi

, cách dễ nhất an toàn nhất để thực hiện yêu cầu kiểm tra để đảm bảo rằng các giá trị truy vấn/form dự kiến ​​đã được thông qua để xử lý Nancy của tôi là gì?

Cảm ơn

Trả lời

12
Request.Form.userid.HasValue 

trình cho tất cả các thành viên DynamicDictionary, chẳng hạn như Form, Query và các thông số tuyến đường

2

Bạn có thể sử dụng Bind tức là một ModelBinder để ràng buộc mô hình của bạn để hình thành, nơi các thuộc tính của lớp mô hình tương ứng với các tên điều khiển HTML của bạn.

var course = this.Bind<Course>(); // Course is our model class 
if(course != null) { 
    // your codes go here 
}