我在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.com到http://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操作方法重定向到命名路由
答案 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.com
或yourSiteName.com/build
发出请求时,它将由Build
操作方法处理