2014-10-10 317 views

回答

4

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

然后在代码中,你可以调用这个(不知道它在剃刀可用,但它应该是容易写一个辅助方法):

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

看起来很合理,但我需要将主页作为登录页面。这不可行吗? – 2014-10-10 14:28:27

+0

好的,我会更新,但...这可能是一个坏主意,尤其是对于SEO。 – DavidG 2014-10-10 14:29:23

+0

这是一个内联网站点,所以SEO不是一个问题。 – 2014-10-10 14:30:50

1

您可能需要为默认路线之前的Home/Index创建特定路线。然后,您可以将默认路线和主页/索引路线指向同一地点。但是,如果您转到基本路由,这将不会将您重定向到主页/索引...因此,您必须添加url重定向,无论是在IIS级别(有设置都可以这样做),或者您可以添加代码到您的索引页面查看网址并重定向到完整的网址。

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

+0

嗯有趣的方法。想想看,使用纯粹的MVC,但仍然得到了我的+1。 – DavidG 2014-10-10 15:06:29

相关问题