404 asp.net mvc - 路由中的初学者问题

时间:2010-03-19 12:57:22

标签: asp.net-mvc

这是asp.net MVC的初学者级别问题

我在global.asax.cs

中有以下代码
public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = (string)null }  // Parameter defaults
            );



        }

在Homecontroller.cs中,我更新了Index方法,如下所示

public ActionResult Index(string id)
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC1!"+ id;

            return View();
        }

我的理解是,如果我提供网址http://localhost/mvc1/default/1,它应该有效

相反,它会抛出404错误

任何帮助这个

背后的原因是什么

2 个答案:

答案 0 :(得分:1)

您要求的URL是要求名为“mvc1”的控制器和名为“default”的操作,该操作将收到ID为“1”的ID。既然您没有名为“mvc1”的控制器(我假设?),那么您将收到404错误。

仅在未提供控制器和操作时才使用控制器和操作的默认值。由于您提供了控制器和操作,MVC正在专门寻找它们。

答案 1 :(得分:1)

我假设您的应用程序名为“mvc1”,这是您项目的根目录。如果是这样的话:

因此,“默认”是您的路线的名称,而不是行动的名称。基本上路由引擎所做的是寻找一个匹配请求的控制器和动作。给定你设置的路由,它会像这样分解:

http://localhost/MVCApplication1/default/1
                                 (cont)  (action)

如果省略路线的某些部分,它将尝试使用您指定的默认值填写缺失值。如您所见,项目中没有名为DefaultController的控制器,因此它使用您指定的默认值Home。然后它尝试查找名为default的操作方法并再次失败,因此它使用路由中的默认值Index。最后,您的网址中还有2个细分受众群,并且没有路由符合该模式(操作后有2个细分受众群),因此无法找到合适的位置。

您需要做的是删除其中一个细分,这应该可行。路由可能有点棘手,所以我建议阅读它。