我在MVC中路由时遇到麻烦。我已经为我的联系页面创建了一个控制器,但是除非我将路由指定为/contact/index
,否则它将返回404。我看不到为什么它无法在URL中仅使用/contact
来查找视图。我的RouteConfig
对我来说不错。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "T",
url: "T/{action}",
defaults: new { controller = "Home", action = "Index" }
);
routes.MapRoute(
name: "Holding",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Holding", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
我看到它找不到其视图的唯一原因是由于我配置了新的Route,以显示站点等待页面。有趣的是,/t
确实显示了“演示”主页,所以我看不出为什么它不仅仅像/contact
一样。
This S.O文章告诉我,我可以通过给它自己的MapRoute
来解决问题,但我不必做所有这些事情吗?
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Holding()
{
return View();
}
}
public class ContactController : Controller
{
// GET: Contact
public ActionResult Index()
{
return View();
}
}
这一定是愚蠢的,但我无法解决。
答案 0 :(得分:1)
您遇到路线冲突
/contact
将匹配
routes.MapRoute(
name: "Holding",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Holding", id = UrlParameter.Optional }
);
但是由于联系人控制器没有Holding
操作,您将得到 404 Not Found
并且由于它匹配了 Holding 路线,因此在第一个比赛获胜时不会继续执行下一个 Default 路线。
添加的路线过于笼统,因此会出现很多错误匹配。
基于所示的控制器,不需要添加的路由。保留路径仍将与默认路由模板匹配。因此实际上可以将其完全删除。