我刚开始使用.NET,正在构建一个测试应用程序。我目前使用DefaultController
和Index()
操作方法设置了主页。这可以按预期工作,主页很简单www.domain.com。
我使用DefaultController
和Terms()
操作方法在同一Privacy()
下创建了2个新页面(条款和隐私权)。
我希望能够使用以下网址浏览这些内容:www.domain.com/terms和www.domain.com/privacy。
当我使用<li>@Html.ActionLink("Terms of Service", "Terms", "Default")</li>
它有效时,它会将我带到www.domain.com/Default/privacy的网址。
我应该为每个页面创建单独的控制器,还是我错误地使用@html.ActionLink
助手?我以前使用<li><a href="~/privacy">Privacy Policy</a></li>
,但我知道这不是最佳做法吗?
另外,有没有办法强制链接为小写?
我的控制器代码:
public class DefaultController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Terms()
{
return View();
}
public ActionResult Privacy()
{
return View();
}
}
答案 0 :(得分:3)
如果这些是HomeController
,我不相信你会遇到同样的问题。但是,我认为您可以使用RouteConfig
文件来解决这个问题:
routes.MapRoute(
name: "Default",
url: "{Action}/{Id}",
defaults: new { controller = "Default", Action = "Index", Id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Generic",
url: "{controller}/{Action}/{Id}",
defaults: new { Action = "Index", Id = UrlParameter.Optional }
);
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以使用属性路由为端点提供特定路由。
[Route("terms")]
public ActionResult Terms()
{
return View();
}
[Route("privacy")]
public ActionResult Privacy()
{
return View();
}
在RouteConfig.cs
中,您必须使用以下代码行启用属性路由:routes.MapMvcAttributeRoutes();
现在,使用@Url.Action()
或@Html.ActionLink
生成的所有网址都应生成以domain.com/privacy和domain.com/terms