我刚从.NET开始,正在构建一个测试应用程序。我目前已经使用DefaultController和Index()操作方法设置了主页。这和预期的一样,主页是简单的www.domain.com。
我在同一个DefaultController下创建了两个新页面(术语和隐私),使用Terms()和Privacy()操作方法。
我希望能够浏览这些网址为www.domain.com/terms和www.domain.com/隐私。
当我使用<li>@Html.ActionLink("Terms of Service", "Terms", "Default")</li>时,它可以工作,但它会让我访问网址:www.domain.com/Default/隐私。
我应该为这些页面中的每一个创建独立的控制器,还是我使用的@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();
}
}发布于 2016-07-21 15:35:18
如果这些是在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 }
);发布于 2016-07-21 16:09:15
我相信您想要做的是将控制器名称隐藏在url中。如果是这样的话,你的问题在这里得到回答:
发布于 2016-07-22 22:14:47
您可以使用属性路由为端点提供特定路由。
[Route("terms")]
public ActionResult Terms()
{
return View();
}
[Route("privacy")]
public ActionResult Privacy()
{
return View();
}在RouteConfig.cs中,必须使用以下代码行启用属性路由:routes.MapMvcAttributeRoutes();
现在,使用@Url.Action()或@Html.ActionLink生成的任何urls都应该生成URLS,如domain.com/隐私和domain.com/terms
https://stackoverflow.com/questions/38508304
复制相似问题