C# 当URL不包含索引时返回404

C# 当URL不包含索引时返回404,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,我在MVC中遇到路由问题。我已经为我的联系人页面创建了一个控制器,但是除非我将路由指定为/contact/index,否则它将返回404。我不明白为什么它在URL中找不到只有/contact的视图。我的RouteConfig看起来不错 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

我在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 }
            );
        }
我能看到它没有找到它的视图的唯一原因是因为我配置了新的路由来显示一个站点保留页。有趣的是,
/t
确实显示了“演示”主页,所以我不明白为什么它不喜欢只显示
/contact

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();
    }
}

这一定是件傻事,但我无法解决。

你有路线冲突

/contact
将匹配

routes.MapRoute(
    name: "Holding",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Holding", id = UrlParameter.Optional }
);
但由于联系人控制器没有保持动作,您将得到一个404未找到

因为它匹配了等待路线,所以当第一场比赛获胜时,它不会进入下一个默认路线

添加的路由太普通,因此会得到很多错误匹配


根据显示的控制器,不需要添加路由。保留路径仍将与默认路由模板匹配。因此它实际上可以完全删除。

您有路由冲突。我明白了,非常感谢,我需要查看重定向,而不是设置路由和创建冲突:-)