2011-02-03 16 views
14

Tôi có danh sách URL địa phương và tôi cần xác định xem chúng có phải là “đường dẫn MVC hợp lệ” hay không. Làm thế nào tôi có thể kiểm tra nếu một URL (đường dẫn) ánh xạ tới một bộ điều khiển MVC?Làm thế nào tôi có thể kiểm tra nếu một tuyến đường (ASP.NET MVC) tồn tại cho một con đường nhất định?

Phil Haack's Route Debugger sẽ tìm thấy tuyến đường phù hợp với yêu cầu hiện tại và thực hiện điều đó bằng cách sử dụng HttpContext hiện tại. Tôi muốn nhận được thông tin này mà không cần xây dựng một HttpContext giả - nếu có thể.

+0

Nhập đường dẫn vào trình duyệt và kiểm tra 404? – Pierreten

+0

Bạn có muốn kiểm tra xem chúng là đường dẫn hợp lệ hoặc đường dẫn MVC hợp lệ không? – SLaks

+0

@SLaks đường dẫn MVC hợp lệ – mawtex

Trả lời

14

Bạn có thể gọi RouteTable.Routes.GetRouteData bằng HttpContextBase giả.

Các tuyến đường được đối sánh nội bộ bằng cách sử dụng yêu cầu AppRelativeCurrentExecutionFilePath.
Tuy nhiên, chức năng này không được hiển thị, vì vậy bạn cần phải vượt qua số HttpContextBase.

Bạn cần tạo lớp HttpContextBase trả về phiên bản HttpRequestBase trong thuộc tính yêu cầu của nó.
Lớp HttpRequestBase cần trả lại đường dẫn của bạn, bắt đầu bằng ~/, trong thuộc tính AppRelativeCurrentExecutionFilePath của nó.

Bạn không cần phải triển khai bất kỳ thuộc tính nào khác, trừ khi chúng được sử dụng bởi IRouteConstraint s.

Để kiểm tra xem bạn có tuyến đường MVC hay không, hãy kiểm tra xem kết quả là routeData.Handler is MvcRouteHandler.

+0

Làm những phần nào tôi cần để giả lập? – mawtex

+1

@mawtex: Tạo một lớp 'HttpContextBase' trả về URL của bạn trong' Request.AppRelativeCurrentExecutionFilePath' của nó. – SLaks

+1

Tôi thấy đề cập của bạn về các yêu cầu AppRelativeCurrentExecutionFilePath rất có giá trị như tôi đang viết kiểm tra cho điều này ngay bây giờ. Ước gì tôi có thể bỏ phiếu nhiều hơn một lần :) – CRice

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