2008-11-04 41 views
29

Làm cách nào để nhận URL yêu cầu hoàn chỉnh (bao gồm cả chuỗi truy vấn) trong bộ điều khiển của tôi? Đó có phải là vấn đề ghép nối các thông số URL và biểu mẫu của tôi hay không hay là có cách nào tốt hơn.Nhận url yêu cầu đầy đủ, bao gồm các tham số trong bộ điều khiển

Tôi đã kiểm tra this câu hỏi, nhưng dường như không thể áp dụng cho MVC.

Sửa lỗi nếu tôi sai.

Một số thông tin chi tiết hơn:

cuộc gọi của tôi để SearchController.AdvancedSearch() của tôi bắt nguồn từ một dạng với khoảng 15 thông số tùy chọn. Bởi vì số lượng các tham số và không có cách nào có thể (tôi nghĩ) để có tham số tùy chọn được truyền đi một cách sạch sẽ, tôi đã đi cho một chuỗi catchall được xử lý trong bộ điều khiển.

Bây giờ tôi muốn bộ điều khiển lưu trữ cuộc gọi của nó trong một thành phần đường dẫn để khi được bấm vào kết quả chính xác tương tự có thể được tìm nạp (với tất cả, nhưng không nhiều hơn, của các đối số được bao gồm). Để thực hiện việc này, tôi cần toàn bộ request.URL, bao gồm chuỗi truy vấn.

Trong Request.RawURL, request.URL vv chuỗi truy vấn này không được bao gồm. Trong thực tế hiện tại tôi làm một chức năng đơn giản.

String.Format("{0}/{1}", request.Url, request.form) 

Điều này mang lại cho tôi một số kết quả lạ (như giá trị nút gửi, v.v.), nhưng nó hoạt động. Nếu có những gợi ý về cách làm cho điều này ít hơn của một hack xấu xí, xin vui lòng cho biết.

Tôi biết nơi cần tìm yêu cầu hiện tại, nhưng dường như tôi không thể tìm thấy URL thô ở bất kỳ đâu. Tất cả chúng đều bị tước khỏi chuỗi truy vấn và tôi cũng cần bit đó.

Trình điều khiển của tôi cập nhật tập hợp các URL trong thành phần BreadCrumb của tôi. Do đó, nó cần URL yêu cầu. Làm thế nào để bạn đề nghị tôi đưa vào vấn đề này?

Trả lời

37

Bạn có thể sử dụng Request.Url.PathAndQuery.

MVC5: sử dụng Request.RequestUri.PathAndQuery

+2

Heh, cảm ơn câu trả lời của bạn mặc dù câu hỏi này giống như 2 tuổi;) Trong khi đó, hai phiên bản khác của MVC đã xuất hiện và các tham số tùy chọn được hỗ trợ bởi khung MVC, hiển thị vấn đề tranh luận. –

1

Bạn có thể có được ở các đối tượng yêu cầu hiện tại bằng cách sử dụng:

HttpContext.Current.Request 

Tuy nhiên, tôi đã gotta hỏi - tại sao bạn muốn URL yêu cầu? Bằng cách này, bạn đã làm cho bộ điều khiển của bạn phụ thuộc vào đối tượng Yêu cầu, điều này sẽ làm cho các bài kiểm tra đơn vị của bạn khó viết hơn nhiều.

21
HttpContext.Current.Request.RawUrl 
HttpContext.Current.Request.QueryString 

Theo như câu hỏi thứ hai của bạn. Thay vì theo dõi url, thông tin chuỗi truy vấn, v.v, mà người dùng của bạn đã truy cập. Theo dõi các bộ điều khiển và hành động được gọi. Điều đó sẽ loại bỏ hoàn toàn nhu cầu đối tượng Yêu cầu.

+0

Cảm ơn câu trả lời. Tôi sẽ cập nhật câu hỏi của mình để làm cho tình hình của tôi rõ ràng hơn một chút. Xin hãy xem. –

0

Trong bộ điều khiển, bạn có thể truy cập Request.RawUrl.

+0

Cảm ơn bạn đã trả lời nhưng yêu cầu.rawurl không chứa chuỗi truy vấn –

2
Request.RawUrl 

Sử dụng tài sản này là trả lại tất cả các url.

Các vấn đề liên quan