我有一个公司区域的MVC4应用程序。
给定文件结构:
Areas
\
Companies
\
Controllers
|
DefaultController (Contains Index and Edit actions)
TestController (Contains Index and Test action)
我希望我的网址如下:
我的路线设置与我的CompaniesAreaRegistration类一样。
context.MapRoute(
name: "Companies_default",
url: "Companies/{controller}/{action}/{id}",
defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
);
结果:
如何在URL中没有“默认”的情况下访问我的DefaultController.Edit()操作?
更新
根据Brad的回答,我知道我可以硬编码这样的路径,它会起作用。我真的希望有更多的自动解决方案。我不知道在一些Area的默认控制器上最终会有多少动作。我不想为每个人创建新的路线。
这是作为App_Start / RouteConfig.cs文件中MVC模板的一部分添加的默认路由。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
如果我在HomeController上有一个名为“Test”的动作,我可以使用URL / Test来触发该动作。我没有必要添加一个像“/ Test / {id}”这样的URL的新路由,以便它可以工作。它似乎忽略了URL的{controller}部分并使用默认的控制器配置。
为什么在区域中执行此操作会更改此行为?
区域路由与默认路由完全相同,但URL的“公司/”前缀除外。
作为测试,我将默认路由网址更改为url: "Example/{controller}/{action}/{id}"
,我仍然能够通过URL /Example/Test访问HomeController.Test()。
答案 0 :(得分:2)
使用:
context.MapRoute(
name: "Companies_Edit",
url: "Companies/Edit/{id}",
defaults: new { controller = "Default", action = "Edit", id = UrlParameter.Optional }
);
请记住参数从左到右填充(不能跳过{controller}
并且只填充{action}
。如果您想要{controller}
,请在{defaults
中指定1}})