代码之家  ›  专栏  ›  技术社区  ›  Paul Alexander

是否可以将URL解析为其复合组件?

  •  3
  • Paul Alexander  · 技术社区  · 15 年前

    在将一个传入的URL传递到标准的MVC路由逻辑之前,我想先将它解析到它的组件部分,以便进行一些预处理。例如,给定您的标准路线

    {controller}/{action}/{id}
    

    和网址

    /user/show/10
    

    有没有办法让路由系统返回一个包含控制器、操作和ID键及其相应值的字典?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Paul    15 年前

    很简单,路由系统是在app start初始化的,它根据当前上下文计算路由数据,所以只要上下文本身是当前的,就都很好。

    例如,在global.asax的应用程序_beginrequest方法中,您可以获取当前的路由数据,如下所示:

    var routedata = RouteTable.Routes.GetRouteData(new HttpContextWrapper(Context));
    

    反过来,routedata将当前请求的routeValueDictionary存储在其values属性中,并将数据令牌存储在dataTokens属性中。

    保罗

        2
  •  0
  •   John Farrell    15 年前

    MVC已经为你做了这些。您可以访问控制器内的RouteData属性。

    如果您在MVC路由逻辑之前定义了要在何处截取路由数据,我可能会给出更好的答案。

        3
  •  0
  •   Payton Byrd    15 年前

    您是否尝试拆分“/”字符上的字符串?这将为您提供路径部分的有序数组。

    var parts = url.substring(1).Split('/');
    var controller = parts[0];
    var action = parts[1];
    var id = parts[2];