ASP MVC 3 - 如何定义url基础的动态值?

时间:2011-09-23 14:55:15

标签: asp.net-mvc asp.net-mvc-3 url-rewriting asp.net-mvc-routing

我想“显示”网址基础的动态值,因此网址如下:host.com/SOME_VALUE/{area} / {controller} / {action}。

因此,如果请求没有第一个值(动态值)的url:host.com/ {area} / {controller} / {action},则应调用正确的操作但是在呈现视图时(或者可能)当发生重定向时,应返回正确的第一个值的正确URL。

此解决方案仅用于在URL中显示标识用户登录的指定值,如用户名或公司名称,或与当前会话相关的任何其他值,此值将不会用于限制对操作的访问,因此两个URL应该有效并在同一会话中调用相同的操作:

host.com/ {面积} / {控制器} / {行动} host.com/some_value/{area} / {控制器} / {动作}

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这是完全未经测试但我认为它会起作用......

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "MyRoute", // Route name
        "{somevalue}/{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

}

当使用somevalue部分时,是否可以为URL添加额外的静态值?即host.com/users/some_value/area/controller/action。这将使路线映射变得简单,因为您只需要:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "LoggedInUsers", // Route name
        "Users/{somevalue}/{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

}