2013-11-22 141 views
0

我只启用默认路由:ASP.NET MVC路线

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

这将resove像路径:主机名/首页/指数,主机名/主页/美孚,主机名/主页/酒吧/ 23就好了。
但我还必须启用这样的路线:主机名/ {ID}这应该指向 到:
控制器:首页
操作:指数
(编号): Index操作参数 “ID”

这样的路线甚至可能吗?

回答

1

未测试: 你的默认路由

+0

这只是杀死了所有我的AJAX调用:) – dakt

+0

什么网址üR IN ajax请求? –

+0

我有几个人:/首页/注册/ {帕拉姆},/首页/登录/ {参数}等 – dakt

1

如果id是一个数字,你可以添加一个路线上述另一个并定义一个正则表达式约束下创建这样

routes.MapRoute(
     name: "custom", 
     url: "{controller}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 

路线:

routes.MapRoute(
    name: "IdOnlyRoute", 
    url: "{id}", 
    defaults: new { controller = "Home", action = "Index" }, 
    constraints: new { id = "^[0-9]+$" } 
); 
+0

不,这是一个字符串:) – dakt

+0

如果它是一个字符串有一些特定的约束,你仍然可以使用上面的解决方案...如果它只是一个字符串像其他任何东西然后你可能不走运。 – Tallmaris

0

由于时间不够,我配置了路由fo每一个行动。幸运的是,它们并不多。 :)

 routes.MapRoute(
      name: "IndexWithParam", 
      url: "{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "IndexWithOutParam", 
      url: "", 
      defaults: new { controller = "Home", action = "Index" } 
     ); 

     routes.MapRoute(
      name: "Login", 
      url: "Home/Login", 
      defaults: new { controller = "Home", action = "Login" } 
     ); 

因此,最后的路线重复了其他行动。不知道它是否可以做得更好,但它的工作原理。

0

您是否尝试过使用AttributeRouting包装?

然后你的代码看起来像这样

[GET("/{id}", IsAbsoluteUrl = true)] 
    public ActionResult Index(string id) { /* ... */ }