如何避免“/家庭”中的网址(How to avoid “/Home” in the url)

2019-10-22 10:47发布

我使用VS 2013的标准MVC模板。

使用默认设置, HTTP://网站/将被路由到网站/首页/索引。

如何将所有的“行动”的直属网站根URL,例如HTTP://网站/ XXX ,表现出同样的内容的http://网站/主页/ XXX ? 比如,如何让我的http://网站/关于执行的Home控制器的关于行动? 如果可能的话,解决方案不应该是一个HTTP重定向到HTTP://网站/首页/因为我不想表现出“丑”首页/ url中。

Answer 1:

你可以尝试类似以下

routes.MapRoute(
                name: "MyAppHome",
                url: "{action}/{wa}",
                defaults: new { controller = "Home", action = "Index", wa = UrlParameter.Optional, area = "Admin" },
                namespaces: new string[] { "MyApp.Controllers" }
            ).DataTokens = new RouteValueDictionary(new { area = "Admin" });

在这里,你可能会注意到家庭控制器是硬编码,并且不再在要求提供。 你也可以利用的RouteDebugger与路线玩。

HTH



Answer 2:

我无法找到一个答案,这是一个覆盖面会与面向公众的网站的所有问题,而作为一个痛苦的维护,同时仍然保持灵活性。

最后我想出以下。 它允许使用多个控制器,不需要任何保养,并且使所有的网址小写。

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        //set up constraints automatically using reflection - shouldn't be an issue as it only runs on appstart
        var homeConstraints = @"^(?:" + string.Join("|", (typeof(Controllers.HomeController)).GetMethods(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.DeclaredOnly).Select(x => (x.Name == "Index" ? "" : x.Name))) + @")$";

        //makes all urls lowercase, which is preferable for a public facing website
        routes.LowercaseUrls = true;

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        //maps routes with a single action to only those methods specified within the home controller thanks to contraints
        routes.MapRoute(
            "HomeController",
            "{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new { action = homeConstraints }
        );

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


文章来源: How to avoid “/Home” in the url