7

我可以使用 ~/ 映射到 Home 索引,以及 ~/Blog 映射到 Blog Index,但是我如何防止 ~/Home 映射到 Home 索引呢?我不希望从多个端点访问路由。

同样,如何防止从 ~/Controller 和 ~/Controller/Index 访问所有其他“索引”操作?

OK ~/
NO ~/Home
NO ~/Home/Index
OK ~/AnyOtherController
NO ~/AnyOtherController/Index

我想该规则应该类似于阻止任何默认操作显式访问,并且在 home 的情况下也阻止仅通过控制器访问它。

这可以做到吗?过去做过吗?SO 例如不这样做(您可以访问herethere)并且都呈现主页;并且它们可能具有与“索引”不同的默认操作名称,这也可能是可访问的路线。

4

3 回答 3

4

您可以简单地声明不应将路由应用于与那里的模式匹配的 URL。例如:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Ignore("Home/{*pathInfo}");
    routes.Ignore("{controller}/Index");
}

然后,与这些路由匹配的 URL 将被视为裸页面,这当然不会存在。

于 2012-04-04T16:19:21.603 回答
4

像这样实现它,以便将这些路由视为 404 错误,但仍在我的 MVC 应用程序中(以便发生自定义错误视图):

    /// <summary>
    /// By not using .IgnoreRoute I avoid IIS taking over my custom error handling engine.
    /// </summary>
    internal static void RegisterRouteIgnores(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "IgnoreHome",
            "Home",
            new { controller = "Error", action = "NotFound" }
        );

        routes.MapRoute(
            "IgnoreIndex",
            "{controllerName}/Index/{*pathInfo}",
            new { controller = "Error", action = "NotFound" }
        );

这确实允许通过使用访问 Home/Index 操作/home/{id},但我愿意接受。

于 2012-04-06T17:30:44.157 回答
0

这就是我能够实现我认为你的要求的方式。

// Portal Sections
        routes.MapRoute("Home",
                        "",
                        new { controller = "Home", action = "Index" },
                        new[] { "Myapp.Portal.Controllers" });

        routes.MapRoute("About",
                        "about",
                        new { controller = "Home", action = "About" },
                        new[] { "Myapp.Portal.Controllers" });

        routes.MapRoute("Features",
                        "features",
                        new { controller = "Home", action = "Features" },
                        new[] { "Myapp.Portal.Controllers" });


        routes.MapRoute("Help",
                        "help",
                        new { controller = "Help", action = "Index" },
                        new[] { "Myapp.Portal.Controllers" });

        routes.MapRoute("Knowledgebase",
                        "help/kb",
                        new { controller = "Help", action = "Knowledgebase" },
                        new[] { "Myapp.Portal.Controllers" });

我可以访问

  • mysite.com
  • mysite.com/about
  • mysite.com/features
  • mysite.com/help
  • mysite.com/help/kb

但无法访问

  • mysite.com/home/about
  • mysite.com/home/features

希望这有帮助:)

于 2012-10-07T22:21:38.750 回答