这里没什么帮助和建议。
在我的第一个MVC应用程序上工作,我有一个学生设置实体 具有基本CRUD功能的学生控制器和视图。 mysite.com/Student让我在那里。
现在我想添加付款,所以我添加了一个Payments控制器和基本crud的视图。 这给了我mysite.com/Payments
我希望付款的网址如下:mysite.com/Student/Payments
所以我研究了URL路由,并且(我认为)我已经向后退了很长时间,因为似乎没有任何工作。但是现在,我已经创建了这个额外的路线:
routes.MapRoute(
"Payments",
"Student/Payments/{action}/{id}",
new { Controller = "Payments", action = "Index", id = UrlParameter.Optional }
);
现在一切似乎都正常了。当我将ActionLink发送到付款控制器中的任何操作时,URL是正确的。例如:www.mysite.com/Student/Payments/Edit/5作为URL出现。
我遇到的问题是Payments仍然是一个基本的URL路由。所以我也可以访问www.mysite.com/Payments
来获得付款如何“删除”该路线,以便mysite.com/Payments无效?或者我是以某种方式做到这一切?
任何帮助表示赞赏。
答案 0 :(得分:1)
你对它的思考是一种扭曲的方式。映射配置只提供一个规则的规则列表,以指定特定URL的代码所在的位置。
所以当你说它还在打mysite.com/Payments时。那是因为它击中了Global.asax中的默认规则
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults
);
你可以删除它,但是没有默认规则可以使用。
或者您可以添加忽略规则。在你的情况下像
routes.IgnoreRoute("Payments/{action}/{id}");
请确保将其置于默认规则之上。
答案 1 :(得分:0)
您需要使用MapRoute方法的重载作为默认路由,例如:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index" },
new { controller = ""}); //there constraints for controller goes
关于创建自定义约束的this blog post,有"不等于"
的示例