【发布时间】:2014-10-10 14:17:56
【问题描述】:
如果我创建 MVC 操作或操作链接,例如@Url.Action("Index", "Home")" 我被重定向到http://www.example.com,但我想要强制它重定向到http://www.example.com/Home/Index 或http://www.example.com/Home。有没有办法显式渲染完整路径?我的 Google 搜索结果为空。
【问题讨论】:
标签: asp.net-mvc
如果我创建 MVC 操作或操作链接,例如@Url.Action("Index", "Home")" 我被重定向到http://www.example.com,但我想要强制它重定向到http://www.example.com/Home/Index 或http://www.example.com/Home。有没有办法显式渲染完整路径?我的 Google 搜索结果为空。
【问题讨论】:
标签: asp.net-mvc
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);
【讨论】:
您可能需要在默认路由之前为 Home/Index 创建一个特定路由。然后你可以让默认路由和 Home/Index 路由指向同一个地方。但是,如果您转到基本路由,这不会将您重定向到 Home/Index ...因此您必须在 IIS 级别添加 url 重定向(有执行此操作的设置),或者您可以只添加代码到您的索引页面查看 url 并重定向到完整的 url。
或者,您可以删除默认控制器和操作值,然后将 url 重定向添加到您的 IIS 配置中,如果它们转到根目录,则将您重定向到完整路径。
【讨论】: