ASP.NET Core 3.1 区域返回 404

问题描述

我尝试了此链接 Stack Link FOR 404 Error错误不会显示区域的 404 错误

 public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();

        services.AddDbContext<BCAContext>(options =>
                options.UsesqlServer(Configuration.GetConnectionString("BCAContext")));
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

           app.UseEndpoints(endpoints => {
            endpoints.MapControllers();
            //endpoints.MapAreaControllerRoute(
            //    "Student",//    "Student",//    "Student/{controller=StudentExam}/{action=Index}/{id?}");

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

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

      
        //database
        using (var serviceScope = app.applicationservices.GetService<IServiceScopeFactory>().CreateScope())
        {
            var context = serviceScope.ServiceProvider.GetrequiredService<BCAContext>();
            context.Database.EnsureDeleted();
            context.Database.EnsureCreated();
            //context.Database.Migrate();
        }
    }
}

我正在使用的两个区域学生管理员请参考下面的链接

结构图

enter image description here

控制器

 namespace BCA_New_System.Areas.Student.Controllers
{
  public class StudentExamController : Controller
  {
    public IActionResult Index()
    {
        return View();
    }
  }
}

索引页

@{
ViewData["Title"] = "Index";
Layout = "~/Areas/Student/Views/Shared/_Layout.cshtml";
 }

 <h1>Index</h1>

解决方法

您可以为不同的区域添加这样的模式。对于学生区,您添加以下代码片段:

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

在您的控制器中,您必须像这样添加区域注释:

public class StudentExamController : Controller
  {
    [Area("Student")]
    public IActionResult Index()
    {
        return View();
    }
  }