试图从URL隐藏到HomeController / Home

时间:2014-04-02 22:29:43

标签: c# asp.net asp.net-mvc asp.net-mvc-routing

我正在引用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" }
);

2 个答案:

答案 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" });