这是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错误
任何帮助这个
背后的原因是什么答案 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个细分受众群),因此无法找到合适的位置。
您需要做的是删除其中一个细分,这应该可行。路由可能有点棘手,所以我建议阅读它。