如何强制MVC路由到Home / Index而不是root?

时间:2014-10-10 14:17:57

标签: asp.net-mvc

如果我创建MVC操作或操作链接,例如@Url.Action("Index", "Home")"我被重定向到http://www.example.com,但我想要的是强制它重定向到http://www.example.com/Home/Indexhttp://www.example.com/Home。有没有办法明确呈现完整路径?我的谷歌搜索空白了。

2 个答案:

答案 0 :(得分:5)

Url.Action()使用路由生成网址。所以如果你想改变它,你必须改变它。它目前表示默认控制器为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路径访问,因此您可能需要创建目标网页并将其设为默认网页。

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

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

答案 1 :(得分:1)

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

或者,您可以删除默认的控制器和操作值,然后将URL重定向添加到IIS配置中,以便在转到根目录时将其重定向到完整路径。