ASP.NET Core 中如何设置默认区域?

How to set the default area in ASP.NET Core?

我在 ASP.NET 核心 3.1 应用程序 (MVC) 中使用区域。

现在我希望所有没有明确区域的请求默认转到“主”区域。这就是我目前设置端点路由的方式:

app.UseEndpoints(endpoints =>
{
    // 1
    endpoints.MapControllerRoute(
        name: "area",
        pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

    // 2
    endpoints.MapAreaControllerRoute(
                       name: "default",
                       areaName: "Main",
                       pattern: "{area=Main}/{controller=Home}/{action=Index}/{id?}");
});

我的目标是:

如果请求 URL 包含现有区域名称,请使用路由 [1]。如果没有区域名称,则使用路由[2](默认为“Main”区域)。

我的问题:

如何设置默认区域?

好的,解决了。最后,这对我有用:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
               name: "default",
               pattern: "area:exists}/{controller=Home}/{action=Index}/{id?}");


     endpoints.MapAreaControllerRoute(
                name: "default",
                areaName: "Main",
                pattern: "{controller=Home}/{action=Index}/{id?}");
 });

尝试使用以下路由配置:

app.UseEndpoints(endpoints =>
{

    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
    );
    endpoints.MapAreaControllerRoute(
        name: "Main",
        areaName: "Main",
        pattern: "{controller=Home}/{action=Index}/{id?}"
    );

});

有两种方法:

  1. 如果您不指定区域名称,它将查找区域外的 ControllerAction。除了, 重要区域 应该在 Areas 之外,以使其成为您想要的正常(默认区域)。

    app.UseEndpoints(endpoints =>
    {

        // 1
        endpoints.MapControllerRoute(
            name: "area",
            pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

        // 2
        endpoints.MapAreaControllerRoute(
                           name: "default",
                           pattern: "{controller=Home}/{action=Index}/{id?}");

    });
  1. 删除模式中多余的 {area=Main}/
app.UseMvc(routes =>
{
   routes.MapControllerRoute(
      name: "area",
      template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

   routes.MapAreaControllerRoute(
      name: "default",
      areaName: "Main",
      template: "{controller=Home}/{action=Index}/{id?}");
   });

参考下面的帖子可以更好地理解