2013-05-12 86 views
0

我已经注册了这条路线:MVC路线问题

context.MapRoute(
       "Book", 
       "book/{id}", 
       new { action = "index", controller = "book" }, 
       new string[] { "Web.Areas.Books.Controllers" } 
      ); 

这符合网址是这样的: HTTP:///书/ 4f6be481e8f6ae0a9063afe7

现在我有一个网址,这是下面的任一:

http://<domain>/book/4f6be481e8f6ae0a9063afe7/GetFullDescription?app=3 
OR 
http://<domain>/book/GetFullDescription?app=3&id=4f6be481e8f6ae0a9063afe7 

我更喜欢第一条路线。我无法让它工作。 我在书本控制器中定义了一个动作GetFullDescription。

如果我注册一个像这样的路线,它会进入GetFullDescription操作。

context.MapRoute(
       "BookFullDesc",     
       "book/{action}/{id}",     
       new { action = "index", controller = "book", id = UrlParameter.Optional }, 
       new string[] { "Web.Areas.Books.Controllers" } 
      ); 

http://<domain>/book/4f6be481e8f6ae0a9063afe7网址打破

,除非我将其更改为 http://<domain>/book/index/4f6be481e8f6ae0a9063afe7 < - 注意索引的索引后

编辑: 我要的是一个路由同时服务的这2个URL:

http://<domain>/book/4f6be481e8f6ae0a9063afe7 
http://<domain>/book/4f6be481e8f6ae0a9063afe7/GetFullDescription 

感谢

+0

给你的第二个路由,路由器将要寻找名为'4f6be481e8f6ae0a9063afe7'的操作方法 - 我怀疑这就是你以后。 – 2013-05-12 04:49:23

+0

这是本书的id值。我有很多书籍 – kheya 2013-05-12 05:01:39

回答

0
context.MapRoute(
       "Book", 
       "book/{id}/{action}", 
       new { action = "index", controller = "book", app = 3 }, 
       new string[] { "Web.Areas.Books.Controllers" } 
      ); 
+0

如果我需要在书籍下面添加更多网址,这将会在未来造成问题吗? – kheya 2013-05-12 05:20:54

+0

这是可能的,但你现在看到如何处理这些情况(我已经通过在模式中添加{action}对我的答案进行了编辑)。 – 2013-05-12 05:22:19

+0

情况是这样的:我有一个书页。我在书本控制器中有7/8种不同的动作。我需要一条路线来服务所有这些行为(网址)和未来的网址。如果我没有在id之后指定任何内容,那么所有这些url都必须具有/ book/id/action,其中action是默认索引。 – kheya 2013-05-12 05:30:06