如果我创建MVC操作或操作链接,例如@Url.Action("Index", "Home")"我被重定向到http://www.example.com,但我想要强制它重定向到http://www.example.com/Home/Index或http://www.example.com/Home.有没有办法明确呈现完整路径?我的谷歌搜索空洞.
Url.Action()使用路由生成URL。因此,如果要更改它,则必须更改它。当前它说默认控制器是Home,默认操作是Index。将它们更改为其他任何内容,然后应为您提供其他URL。
例如,您的路由配置可能是这样的:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
将默认值更改为其他任何值或将其删除:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
请注意,这样做意味着您的页面只能通过完整controller/action路径访问,因此您可能需要创建一个登录页面并将其设置为默认页面。
如果您绝对需要知道操作的完整URL,则可以通过这种方式进行操作。首先创建一条附加路由,并将其放在路由配置的底部。默认情况下,系统永远不会使用它:
routes.MapRoute(
name: "AbsoluteRoute",
url: "{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
然后在代码中可以调用此方法(不确定它在Razor中是否可用,但是编写辅助方法应该很容易):
var fullURL = UrlHelper.GenerateUrl("AbsoluteRoute", "Index", "Home", null, null, null, null, System.Web.Routing.RouteTable.Routes, Request.RequestContext, false);
Run Code Online (Sandbox Code Playgroud)