从RouteConfig或Controller Action Method重定向到命名路由

时间:2017-11-18 22:49:09

标签: asp.net-mvc asp.net-mvc-4

我在ASP.NET MVC中有以下命名路由:

[Route("build", Name = "Build")]
public ActionResult Build()
{
    return View();
}

我的情况是这个应用程序不再有主页,不需要/Home/Index.cshtml。但是,我不想删除Index.cshtml,也不想将Build.cshtml代码移动到Index.cshtml

我只想将默认路由作为我的Build路由。不幸的是,使用我在整个应用程序中使用的命名构建路径[Route("build", Name = "Build")]@Html.RouteLink("GET BUILDING", "Build")正在制作它,因此我无法进行从http://www.mywebsite.comhttp://www.mywebsite.com/build的简单重定向使用以下任一方式:

在我的RouteConfig中,这不起作用,当您转到http://wwww.mywebsite.com时无法找到资源:

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

此外,这更令人惊讶,这也不起作用,导致在转到http://wwww.mywebsite.com时无法找到资源:

public ActionResult Index()
{
    return RedirectToRoute("Build");
}

我注释掉了我的名字路线:

//[Route("build", Name = "Build")]
public ActionResult Build()
{
    return View();
}

然后我的RouteConfig方式正常工作。

我更倾向于重定向到RouteConfig中的命名路由,但如果我可以从我的/ home / index操作方法重定向到命名路由

1 个答案:

答案 0 :(得分:0)

RouteLink采用路线名称,而不是路线模式/模板,因此您只需将路线模式更改为""(空字符串)

[Route("", Name = "Build")]
public ActionResult Build()
{
    return View();
}

当请求yourSiteName.com时,它将由Build操作方法处理,因为它与路由模式匹配(在baseurl之后没有

使用RouteLink帮助程序方法中的路径名称的所有现有代码仍然有效,因为我们没有更改它。

@Html.RouteLink("GET BUILDING", "Build") 

如果您希望yourSiteName/Build也可以使用,您可以添加另一条路线模式“”以及您当前的路线定义。

[Route("")]
[Route("build", Name = "Build")]
public ActionResult Build()
{
    return View();
}

现在,当yourSiteName.comyourSiteName.com/build发出请求时,它将由Build操作方法处理