在以前的ASP.NET版本中,使用MVC 5,我可以在我的AreaRegistraion中设置这样的路由:
context.MapRoute(
"pfrecent",
"Forums/Recent/{page}",
new { controller = ForumController.Name, action = "Recent", page = 1 },
new[] { "PopForums.Controllers" });
这会将/Forums/Recent
路由到论坛控制器及其最近的操作。但是,我无法弄清楚如何在ASP.Net 5 / MVC 6中使用它。我已将[Area("Forums")]
添加到控制器类,并使用Startup类中的此路由:
routes.MapRoute(
"pfrecent",
"Forums/Recent/{page}",
new { controller = ForumController.Name, action = "Recent", page = 1 });
routes.MapRoute(
name: "areaRoute",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
但是,它会解析为/Forums/Forum/Recent?page=1
。目的是继续使用/Forums/Recent
。
答案 0 :(得分:4)
我们正在使用它来启用MVC 6中的区域:
// Configure MVC routing
app.UseMvc(routes =>
{
// Areas support
routes.MapRoute(
name: "areaRoute",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
// Default routing
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
第一条路线是区域,第二条路线是主要内容。
答案 1 :(得分:4)
On Startup.cs
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "Business",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
})
控制器上的
[Area("Business")]
public class DemoController : Controller
{
public IActionResult Index()
{
return View();
}
}
答案 2 :(得分:0)
将它放在路线列表顶部的Startup.cs文件中:
routes.MapRoute(
name: "forumsAreaRoute",
template: "Forums/{action}/{page?}",
defaults: new {area = "Forums", controller = "Forum", action = "Recent", page = 1});
您的论坛控制器应如下所示:
[Area("Forums")]
public class ForumController : Controller
{
// GET: /<controller>/
public IActionResult Recent(int? page)
{
// Do action stuff here
}
}
此解决方案将满足http://somedomain.com/Forums/Recent/1的网址并返回第一页。
答案 3 :(得分:0)
我讨厌回答我自己的问题,但回过头来看看来源和实验,我发现你必须在路线映射中指定区域,以及HtmlHelpers(我假设...对于标记帮助程序也是如此,但我还没有在转换中走得那么远。)所以路由映射必须如下所示:
routes.MapRoute(
"pfrecent",
"Forums/Recent/{page?}",
new { controller = ForumController.Name, action = "Recent", page = 1, Area = "Forums" }
);
重要的部分是路由值对象中的Area属性。 HtmlHelper必须看起来像这样,也命名为Area:
@Html.ActionLink(PopForums.Resources.Recent, "Recent", ForumController.Name, new { page = 1, Area = "Forums" }, null)
它会使最近页面的网址符合预期/Forums/Recent
。我可以告诉您,在MVC5中的派生AreaRegistration
类中设置路由会为您设置路径上的区域值。在您的控制器类(我已经拥有)上使用[Area("Forums")]
似乎假设以前的区域注册角色。