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

标签 c# asp.net-core attributerouting 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?}");
});
我的目标是:
如果请求 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?}");
     });
    

    最佳答案

    有2种方式:

  • 如果不指定区域名称,它会找到ControllerAction区外。除了,
    重要区域应该在外面 Areas使其像您希望的那样正常(默认区域)。

  • enter image description here
        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?}");
    
        });
    
  • 删除多余的 {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?}");
       });
    

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

    ASP.NET Core 2 default route having areas

    关于c# - 如何在 ASP.NET Core 中设置默认区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60484710/

    相关文章:

    c# - WPF ModelVisual3D 的可见 2D 内容边界

    c# - 对于同一个 C# 项目,为什么 NSwag 在我的计算机上失败,而在我的同事上却失败?

    c# - 尝试在 ASP.NET Core 应用程序中使用 SmtpClient 发送电子邮件时出现错误

    c# - 属性路由识别可选的查询字符串参数

    asp.net-web-api - web api中的属性路由限制

    asp.net-mvc - 如何从 ASP MVC5 中的属性路由中获取路由名称

    c# - 在 C#(或任何语言)中,你最喜欢的删除重复的方法是什么?

    C#属性完全一样,定义在两个地方

    c# - .net core/.net 标准项目之间的 Resharper 引用错误

    .net - 如何在 dotnet core 的命令 shell 中设置值