ASP.NET MVC 3控制器的路线 - 让
目前在HomeController的一切都出现在URL作为ASP.NET MVC 3控制器的路线 - 让
example.com/Home/{Action}
域下下家控制器一切似乎有,我们可以将所有其他路由事情是这样的一种方式但只有特殊情况下的家庭控制器,所以家中的所有东西都在域名下。
像
example.com/about
example.com/contact
example.com/error
,而不是为他们每个人创造新的控制器类。
编辑:
其他网址的喜欢
example.com/user/details/123
example.com/user/edit/123
这是在UserController中应该工作一样,他们现在
我认为最好的方法是:
routes.MapRoute("home", "home", new { controller = "Home", action = "Index" });
routes.MapRoute("about", "about", new { controller = "Home", action = "About" });
routes.MapRoute("contact", "contact", new { controller = "Home", action = "Contact" });
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
,当你想创建一个链接,使用:
@Html.RouteLink("Home", "home", new{/* route values */}, new {/* html attribues */})
OR:
@Html.RouteLink("Home", "home")
代替:
@Html.ActionLink("Home", "Index", "Home", new{/* route values */}, new {/* html attribues */})
这适用于我,也应该为你工作。
UPDATE:
,你可以创建一个像@
(或-
或其他任何东西)的象征,在URL中的action
部分之前,以唯一网址,如:
routes.MapRoute(
"test", // route name
"@{action}", // url and parameters
new {controller = "MyHome", action = "Home"} // parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
这样,您的网址与默认地图路线不同,您可以创建类似以下网址:
site.com/@Home
site.com/@About
site.com/@Contact
但在我的想法中,第一个更好,我总是使用它。
你可以简单地修改默认路由并卸下控制器位从url中指定它将始终为Home
的默认值:
routes.MapRoute(
"Default",
"{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
显然你意识到这会限制你的应用程序到一个单一的控制器,这是HomeController
,因为现在你不再有任何可能将它设置在你的url中。在单个控制器中填充所有操作是恕我直言的惯例,违反了RESTful路由和SRP等一些原则。
使用MVC5的属性路由,我做了类似Javad_Amiry答案,通过将路由在HomeController中每个动作:
public class HomeController : Controller
{
[Route("about")]
public ActionResult About()
{
return View();
}
我想这是不是把每一个动作更容易维护在全局RouteConfig.cs文件中。更好的做法是将属性路由与基于约定的路由结合起来,因此添加到控制器的新行为默认在没有路由属性的情况下工作(例如:/ Home/action),但可以通过添加路由属性(例如:/ action)来改进。
我同意,试过这个,它对我很好。赶上:确保你启用RouteConfig.cs中的属性路由:'routes.MapMvcAttributeRoutes();' – Onisemus
routes.MapRoute(“Default”,“{action}”,new {controller =“Home”,action =“{action}”}); –