Asp.net-Mvc
如何通過 URL 獲取 RouteData?
我需要
RoutData通過 ASP.NET MVC 應用程序中的給定 URL 字元串來獲取。我找到了需要根據我的 URL 字元串進行模擬的方法
HttpContextBase,然後將其傳遞給Route Parsing (Uri to Route)執行緒中的方法。RouteTable.Routes.GetRouteData()如何使用 URL 字元串模擬
HttpContextBase檢索?RouteData``RouteTable.Routes.GetRouteData()還是有另一種RouteData通過 URL 檢索的方法?
我使用Moq來確定
HttpContextBase在GetRouteData(). 他們是:
要求
- AppRelativeCurrentExecutionFilePath
- 路徑資訊
Request.AppRelativeCurrentExecutionFilePath應該返迴路徑~,我正是需要的,所以實用程序類可能是這樣的:public static class RouteUtils { public static RouteData GetRouteDataByUrl(string url) { return RouteTable.Routes.GetRouteData(new RewritedHttpContextBase(url)); } private class RewritedHttpContextBase : HttpContextBase { private readonly HttpRequestBase mockHttpRequestBase; public RewritedHttpContextBase(string appRelativeUrl) { this.mockHttpRequestBase = new MockHttpRequestBase(appRelativeUrl); } public override HttpRequestBase Request { get { return mockHttpRequestBase; } } private class MockHttpRequestBase : HttpRequestBase { private readonly string appRelativeUrl; public MockHttpRequestBase(string appRelativeUrl) { this.appRelativeUrl = appRelativeUrl; } public override string AppRelativeCurrentExecutionFilePath { get { return appRelativeUrl; } } public override string PathInfo { get { return ""; } } } } }然後,您可以像這樣使用它(例如 on
~/Error/NotFound):var rd = RouteUtils.GetRouteDataByUrl("~/Error/NotFound")它應該返回一個如下所示的對象:
RouteData.Values { controller = "Error", action = "NotFound" }