我试图定义一个MapAreaControllerRoute路由到多个区域,但在3.0中,需要设置areaName:属性。我不明白如何使用一个路线对多个区域有效。
我在这里已经阅读了许多问题,但这似乎对MVC Core 3.0来说是新事物。在MVC Core <= 2.2中,您可以在不定义set AreaName的情况下创建MapRoute。
现在,在Startup.cs中,我将端点定义为:
app.UseEndpoints(endpoints =>
{
endpoints.MapAreaControllerRoute(
name: "Area1",
areaName: "Area1",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
endpoints.MapAreaControllerRoute(
name: "Area2",
areaName: "Area2",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
肯定有一种方法可以只定义一条覆盖所有区域的路线吗?
BR 每
答案 0 :(得分:3)
好吧,因此,在阅读了更多的链接之后,事实证明是区域控制器缺少属性的情况! 通过使用以下标签标记控制器:
[Area("Area1")]
[Route("Area1/[controller]/[action]")]
public class Area1Controller : Controller
{
public IActionResult Index()
{
return View();
}
}
并将路线更改为:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapAreaControllerRoute(
name: "areas",
areaName: "areas",
pattern: "{area}/{controller=Home}/{action=Index}/{id?}"
);
}
一切似乎都按预期进行。
答案 1 :(得分:1)
您可以使用MapControllerRoute()
为区域编写通用模式:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
endpoints.MapDefaultControllerRoute();
});
然后,区域控制器仅需要Area
属性:
[Area("AreaName")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}