目前家庭控制下的所有内容都显示在URL中
example.com/Home/{Action}
有没有办法可以保持所有其他路由的方式,但只有特殊情况的家庭控制器,所以家里的一切都属于域名。
喜欢
example.com/about
example.com/contact
example.com/error
而不是为每个人创建新的控制器类。
编辑:
其他网址就像
example.com/user/details/123
example.com/user/edit/123
userController中的内容应该与现在相同
答案 0 :(得分:14)
我认为最好的方法是:
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 */})
这对我有用,也适合你。
更新:
您可以在网址的@
部分之前创建-
(或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
但在我的想法中,第一个更好,我总是使用它。
答案 1 :(得分:6)
使用MVC5的属性路由,我做了类似于Javad_Amiry的答案,为HomeController中的每个动作设置一个路径:
public class HomeController : Controller
{
[Route("about")]
public ActionResult About()
{
return View();
}
我认为这比将所有操作放在全局RouteConfig.cs文件中更易于维护。更好的是将属性路由与基于约定的路由相结合,因此添加到控制器的新操作默认情况下不使用Route属性(例如:/ Home / action),但可以通过添加Route属性(例如:/ action)来改进。
答案 2 :(得分:0)
您可以简单地修改默认路由并从网址中删除控制器位,并指定它始终为默认值Home
:
routes.MapRoute(
"Default",
"{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
显然,您意识到这会将您的应用程序限制为HomeController
的单个控制器,因为现在您不再有可能在您的网址中设置它。在一个控制器中填充所有操作是一种不好的做法恕我直言,并违反了RESTful路由和SRP等几个原则。
答案 3 :(得分:0)