我有一个默认路由,所以如果我去www.domain.com/app/,那就是HomeController。我对控件有另一个动作,例如helloworld但是如果我去www.domain.com/app/helloworld它就会失败,而404(毫无疑问是期待helloworld控制器)。
如何在默认控制器上进行非默认操作?如何将url / app / helloworld映射到helloworld操作。我的路由如下:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute( //this fails with same 404 like it does when it's ommitted
"Hello", // Route name
"app/helloworld", // URL with parameters
new { controller = "Home", action = "HellowWorld", id = UrlParameter.Optional } // Parameter defaults
);
基本上我需要:
/ app / => Controller = Home,Action = Index
/ app / helloworld => Controller = Home,Action = HelloWorld, 不是Controller = HelloWorld,Action - Index
/ app / other => Controller = Other,Action = Index
答案 0 :(得分:2)
将Global文件中的2 routes
替换为:
routes.MapRoute(
"Default", // Route name
"App/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
然后验证您的HomeController
是否包含:
public ActionResult Index()
{
return View();
}
public ActionResult HelloWorld()
{
return View();
}
这样做是yoursite.com/app/ANYCONTROLLER/ANYACTION
将路由到控制器和操作(只要它们存在),默认new { controller = "Home", action = "Index"
意味着如果有人前往yoursite.com/app/
它将会自动路由到yoursite.com/app/Home/Index
。
如果这不起作用,请尝试删除app/
,使其显示如下:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
你看起来像是试图路由yoursite.com/Home/Index
,而第二条路线的措辞是错误的,我不确定它会做什么,但不是"app/helloworld
它应该看起来像{{ 1}}然后"app/HelloWorld/{action}/{id}"
会起作用。如果有人前往new { controller = "Home", action = "HellowWorld"
,它会自动显示yoursite.com/app
。希望有助于澄清一些事情。
这是您想要的答案
出于某种原因,您不想为hello world部分创建新控制器,yoursite.com/app/Home/HelloWorld
文件中的RegisterRoutes
应如下所示:
Global
虽然我不建议这样做。
答案 1 :(得分:0)
你应该只需要一条路线。而不是对操作进行硬编码,使其成为变量,但包括默认值:
routes.MapRoute( //this fails with same 404 like it does when it's ommitted
"Hello", // Route name
"app/{action}", // URL with parameters
new { controller = "Home", action = "HelloWorld", id = UrlParameter.Optional }
);
这样,当您转到 www.domain.com/app/ 时,它将获得默认操作(HelloWorld)。但您仍然可以在 www.domain.com/app/someotheraction 中指定路线中的操作。
另外,请记住选择了第一条匹配路线...因此您应该考虑将默认路线移至末尾,或将其完全删除。在示例 www.domain.com/app/helloworld 中,它与默认路由匹配 app 作为控制器, helloworld 作为操作(这当然是无效的,因此404)。