代码之家  ›  专栏  ›  技术社区  ›  Serge S.

如何通过URL获取路由数据?

  •  29
  • Serge S.  · 技术社区  · 14 年前

    我要去接你 RoutData

    我找到了嘲笑的方法 HttpContextBase 基于我的URL字符串,然后将其传递给 RouteTable.Routes.GetRouteData() Route Parsing (Uri to Route) 线程。

    HttpContextBase 检索 RouteData 按URL字符串使用 RouteTable.Routes.GetRouteData路由表() ? 路由数据

    2 回复  |  直到 14 年前
        1
  •  41
  •   KyleMit Steven Vachon    5 年前

    我曾经 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 ""; }
                }
            }
        }
    }
    

    ~/Error/NotFound ):

    var rd = RouteUtils.GetRouteDataByUrl("~/Error/NotFound")
    

    它应该返回如下所示的对象:

    RouteData.Values
    {
        controller = "Error",
        action = "NotFound"
    }
    
        2
  •  7
  •   xrasvo    8 年前

    这对我很有用(.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()))));