2014-09-04 125 views
0

所以我有一个缺省路由缩短MVC控制器路由乌里

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

这个伟大的工程,正是我想要做的事。所以它看起来像我可以手动更改url参数为我想要的任何模式。那么,为什么那么,这不行:

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

我知道asp.net默认路由使用(名称)控制器模式和提取物(名称),并用它作为URL,但它似乎没有不如果我想自定义控制器名称应该去的url部分,则工作。

我觉得我的大脑起飞假期就这一个=(

+0

是什么让你觉得它不起作用?如果输入'http:// /s',它会将您带到'Structures'控制器的'Index'方法。如果没有,这个问题可能是您的路线的顺序 – 2014-09-05 00:05:51

+0

@StephenMuecke这正是我也是!唉,我得到了“找不到资源”。错误,所以我显然做错了什么。 – Josh 2014-09-05 00:40:38

+0

@StephenMuecke AARRRGG,没关系。我注册了“Default”路由,我想我不知道这覆盖了所有的自定义路由。我评论说,它的工作。 太令人沮丧了...... – Josh 2014-09-05 00:43:58

回答

1

你的路线将正常工作。如果不是,它可能是由于的顺序定义你的路由(顺序是显著)从this article

传入URL是在图案 出现在路由字典顺序比较路由patters(这就是我们添加的路线图 在我们RouteConfig.cs文件)。

钍e成功匹配控制器,动作和 动作参数的第一路由或者URL中的参数或定义为路由映射一部分的默认值 将调用指定的 控制器和动作。这很重要,并且要求我们仔细考虑我们的 路由,以便错误处理程序不会被无意中调用 。