Как получить RouteData по URL?

Мне нужно получить RoutData по заданной строке URL в приложении ASP.NET MVC.

Я нашел способ, которым я должен издеваться над HttpContextBase на основе моей строки URL, а затем передать его RouteTable.Routes.GetRouteData() в RouteTable.Routes.GetRouteData() Route Parsing (Uri to Route) .

Как издеваться над HttpContextBase для получения RouteData по URL-адресу с помощью RouteTable.Routes.GetRouteData() ? Или есть другой способ получить URL-адрес RouteData по URL-адресу?

Я использовал Moq для определения того, какие элементы HttpContextBase используются в GetRouteData() . Они есть:

  • Запрос
    • AppRelativeCurrentExecutionFilePath
    • PathInfo

Request.AppRelativeCurrentExecutionFilePath должен возвращать путь с ~ , что мне точно нужно, поэтому class утилиты может быть таким:

 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 ""; } } } } } 

Если вы передаете ~ / Error / NotFound , например, RouteUtils.GetRouteByUrl("~/Error/NotFound") возвращает что-то вроде

 RouteData.Values { controller = "Error", action = "NotFound" } 

Возможно, это будет полезно для всех.

Это работает для меня (.NET 4.5, MVC 5): https://average-joe.info/url-to-route-data/

 System.Web.Routing.RouteData routeFromUrl = System.Web.Routing.RouteTable.Routes.GetRouteData( new HttpContextWrapper( new HttpContext( new HttpRequest(null, path, query), new HttpResponse(new System.IO.StringWriter())))); 
  • Маршрутизация ASP.NET MVC через атрибуты метода
  • Вложенные маршруты в реакционном маршрутизаторе v4
  • Поддержка ASP.net MVC для URL с дефисами
  • Как игнорировать маршрут в asp.net
  • Маршрутизация на основе ролей MVC
  • Давайте будем гением компьютера.