【问题标题】:How to force MVC to route to Home/Index instead of root?如何强制 MVC 路由到 Home/Index 而不是 root?
【发布时间】:2014-10-10 14:17:56
【问题描述】:

如果我创建 MVC 操作或操作链接,例如@Url.Action("Index", "Home")" 我被重定向到http://www.example.com,但我想要强制它重定向到http://www.example.com/Home/Indexhttp://www.example.com/Home。有没有办法显式渲染完整路径?我的 Google 搜索结果为空。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    Url.Action() 使用路由生成 URL。所以如果你想改变它,你必须改变它。它目前说默认控制器是Home,默认操作是Index。将它们更改为其他任何内容,然后它应该会为您提供不同的 URL。

    例如你的路由配置大概是这样的:

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

    将默认值更改为其他任何值或删除它们:

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

    请注意,这样做意味着您的页面只能通过完整的controller/action 路径访问,因此您可能需要创建一个登录页面并将其设为默认值。

    如果您绝对需要知道某个操作的完整 URL,那么您可以这样做。首先创建一个额外的路线并将其放在路线配置的底部。默认情况下,这永远不会被系统使用:

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

    然后在代码中你可以调用它(不确定它在 Razor 中是否可用,但编写辅助方法应该很容易):

    var fullURL = UrlHelper.GenerateUrl("AbsoluteRoute", "Index", "Home", null, null, null, null, System.Web.Routing.RouteTable.Routes, Request.RequestContext, false);
    

    【讨论】:

    • 看起来很合理,但我需要将主页作为登录页面。这不可行吗?
    • 好的,我会更新,但是...这可能是个坏主意,尤其是对于 SEO。
    • 这是一个内部网站,所以 SEO 不是问题。
    • 仍然意味着同一页面有多个 URL,但是,你是老板! :)
    • 如果你的路由有默认操作,而不是控制器,它应该可以工作。
    【解决方案2】:

    您可能需要在默认路由之前为 Home/Index 创建一个特定路由。然后你可以让默认路由和 Home/Index 路由指向同一个地方。但是,如果您转到基本路由,这不会将您重定向到 Home/Index ...因此您必须在 IIS 级别添加 url 重定向(有执行此操作的设置),或者您可以只添加代码到您的索引页面查看 url 并重定向到完整的 url。

    或者,您可以删除默认控制器和操作值,然后将 url 重定向添加到您的 IIS 配置中,如果它们转到根目录,则将您重定向到完整路径。

    【讨论】:

    • 嗯,有趣的方法。虽然我认为我使用纯 MVC 解决了这个问题,但仍然得到了我的 +1。
    猜你喜欢
    • 1970-01-01
    • 2019-12-11
    • 2021-10-13
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    相关资源
    最近更新 更多