我正在引用this question来尝试完成此操作,但它仅适用于我的索引方法,我不确定原因。
我的项目中有一个区域(如果这是相关的),我有大约5个不同的视图,我想隐藏/回家/在网址中。
代码:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"JobResults", // Route name
"JobSearch/{title}-{id}", // URL with parameters
new { controller = "JobSearch", action = "Job" }, // Parameter defaults
new[] { "inkScroll.Web.Controllers" }
);
routes.MapRoute("home", "{action}",
new { controller = "Home", action = "index" });
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new
{
controller = "^(account|common|base|jobsearch)$", //every controller goes in here
action = "Index",
id = UrlParameter.Optional
},
new[] { "inkScroll.Web.Controllers" }
);
答案 0 :(得分:2)
我在ASP.NET MVC 5的基于属性的路由功能的帮助下解决了同样的问题。比如说,我的Home Controller中有一个名为ContactUs的动作,如下所示:
public ActionResult ContactUs()
{
return View();
}
我曾经将联系人的Url作为/Home/ContactUs
获取。但是,我希望它只是/ContactUs
。所以,我正在使用Route属性对ContactUs操作进行如下处理:
[Route("ContactUs")]
public ActionResult ContactUs()
{
}
所以,这对我来说非常合适。因此,如果您使用的是ASP.NET MVC 5,我会说,利用MVC5的这一优秀功能。它不仅可以帮助您分离Route Logic和Actions,而且还可以很容易地解决许多问题。
如果ASP.NET MVC5不适合你,或者你不想在Action Methods上使用Route Attribute,那么,也许以下路由可以工作:(虽然我没有测试它)
routes.MapRoute("Default", "",
new { controller = "Home", action = "index" });
此页面包含有关属性路由的有用资源:http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx
答案 1 :(得分:0)
抓住所有wildcard路线,因为最后一条路线可以正常工作
routes.MapRoute("home2", "{*path}",
new { controller = "Home", action = "index" });