【发布时间】:2013-09-06 08:42:15
【问题描述】:
如何使用连字符实现 asp.net mvc 动作名称,例如 www.domain.com/about-us 其中about-us 是主控制器中的动作名称。通过这种方法,我可以实现具有contact-us、how-to 等操作名称。
【问题讨论】:
-
路线也应该可以
标签: c# asp.net-mvc asp.net-mvc-routing
如何使用连字符实现 asp.net mvc 动作名称,例如 www.domain.com/about-us 其中about-us 是主控制器中的动作名称。通过这种方法,我可以实现具有contact-us、how-to 等操作名称。
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-routing
您可以在actionName 标签内提供您的操作名称。
[ActionName("about-us")]
public ActionResult AboutUs() {
return View();
}
【讨论】:
以下是 .Net MVC 5 项目问题的完整解决方案:
打开您项目的 App_Start/RouteConfig.cs 文件。
在你的 RegisterRoute 方法中,修改如下代码:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapMvcAttributeRoutes(); // <--- add this line to enable custom attribute routes
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
现在,打开您的控制器文件,然后在您的操作顶部添加自定义路由的定义,如下所示:
[Route("about-us")]
public ActionResult AboutUs()
{
return View();
}
您现在应该可以像这样使用您的自定义路由了:
http://yourdomain.com/about-us
【讨论】:
在AreaRegistration.cs 文件中,您可以添加如下路由表条目.....
context.MapRoute(
"about_us_default",
"about-us",
new { action = "AboutUs" }
);
【讨论】:
在 MVC5 中你也可以设置属性路由:
[Route("about-us")]
public ActionResult AboutUs()
{
return View();
}
【讨论】:
Url.Action("AboutUs") 但生成的 URL 将是 about-us