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

Ing*_*mar 6 c# attributerouting asp.net-core asp.net-core-routing

我在我的 ASP.NET Core 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?}");
});
Run Code Online (Sandbox Code Playgroud)

我的目标是:

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

我的问题:

  • 对“/main/admin”的请求工作正常。
  • 对“/admin”的请求会导致 404。

如何设置默认区域?

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

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?}");
 });
Run Code Online (Sandbox Code Playgroud)

Ngu*_*ong 6

有2种方式:

  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?}");

    });
Run Code Online (Sandbox Code Playgroud)
  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?}");
   });
Run Code Online (Sandbox Code Playgroud)

请参阅以下线程以更好地理解

具有区域的 ASP.NET Core 2 默认路由