Làm cách nào tôi có thể nhận được hành động của bộ điều khiển (phương pháp) và loại bộ điều khiển sẽ được gọi, với số System.Web.Routing.RouteData
?Làm cách nào để có được loại bộ điều khiển và thông tin hành động từ url hoặc từ dữ liệu tuyến đường?
Kịch bản của tôi là điều này - Tôi muốn có thể thực hiện một số hành động nhất định (hoặc không) trong phương thức OnActionExecuting
cho một hành động.
Tuy nhiên, tôi thường không muốn biết hành động hiện tại, nhưng hành động "gốc" được gọi; bởi điều này tôi có nghĩa là tôi có thể có một cái nhìn gọi là "Đăng nhập", đó là trang đăng nhập của tôi. Chế độ xem này có thể bao gồm một chế độ xem một phần khác "LeftNav". Khi OnActionExecuting
được gọi cho LeftNav, tôi muốn có thể xác định rằng nó thực sự được gọi là "gốc" aciton của Đăng nhập.
Tôi nhận thấy rằng bằng cách gọi RouteTable.Routes.GetRouteData(actionExecutingContext.HttpContext)
, tôi có thể nhận được tuyến đường cho yêu cầu "root", nhưng làm cách nào để biến điều này thành thông tin về phương thức và loại ?
Giải pháp duy nhất tôi có cho đến nay, là một cái gì đó như:
var routeData = RouteTable.Routes.GetRouteData(actionExecutingContext.HttpContext)
var routeController = (string)routeData.Values["controller"];
var routeAction = (string)routeData.Values["action"];
Vấn đề với điều này là "routeController" là tên bộ điều khiển với các "điều khiển" hậu tố loại bỏ, và không đủ điều kiện; tức là "Đăng nhập", thay vì "MyCode.Website.LoginController".
Tôi muốn nhận được thực tế Type
và MethodInfo
nếu có thể hoặc ít nhất là tên loại đủ điều kiện.
Bất kỳ suy nghĩ hoặc phương pháp thay thế nào?
[EDIT - đây là ASP.Net MVC 1.0]
Thật không may, điều này sẽ không hoạt động vì nó trả về loại hành động bộ điều khiển * hiện tại *, chứ không phải hành động của trình điều khiển "gốc" trong ví dụ mà tôi đã đưa ra. Lý do tôi gọi GetRouteData (actionExecutingContext.HttpContext) là bởi vì điều này không thành công cho tôi các tuyến đường cho "root", nhưng tôi không thể sau đó dịch này vào loại điều khiển và phương pháp. –
Đó là một gợi ý rất thú vị - cảm ơn nữ hoàng3 –
Không sử dụng lưu trữ ThreadLocal từ bên trong một ứng dụng ASP.NET. ASP.NET yêu cầu có thể nhảy xung quanh giữa các chủ đề, do đó, lưu trữ ThreadLocal có thể biến mất khi bạn không mong đợi nó. Sử dụng HttpContext.Items thay vào đó nếu bạn cần lưu trữ thông tin chỉ xung quanh yêu cầu hiện tại. – Levi