1

这里的帮助和建议很少。

在我的第一个 MVC 应用程序上工作,我有一个学生设置实体。
具有基本 CRUD 功能的学生控制器和视图。mysite.com/Student 让我到达那里。

现在我想添加 Payments,所以我添加了一个 Payments 控制器和带有基本 crud 的视图。这给了我 mysite.com/Payments

我希望付款转到如下所示的 URL: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 无效?还是我以某种方式做这一切?

任何帮助表示赞赏。

4

2 回答 2

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}");

确保将其置于默认规则之上。

于 2012-06-02T15:09:34.567 回答
0

您需要为默认路由使用 MapRoute 方法的重载,即:

routes.MapRoute(  
  "Default",  
  "{controller}/{action}/{id}",  
  new { controller = "Home", action = "Index" },
  new { controller = ""}); //there constraints for controller goes

看看这篇关于创建自定义约束的博客文章,有“不等于”的例子

于 2012-06-02T15:12:55.253 回答