【问题标题】:How do I organize the .NET 6 Minimal Web Api routes?如何组织 .NET 6 Minimal Web Api 路由?
【发布时间】:2021-09-15 21:44:14
【问题描述】:

如何将我的“/api/employees”路由移出 program.cs?

程序.cs:

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("AppDb");

// Add services to the container.

builder.Services.AddControllers();

builder.Services.AddDbContext<AppDbContext>(o => o.UseSqlServer(connectionString));

builder.Services.AddAuthorization();
builder.Services.AddAuthentication();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (builder.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.UseAuthentication();

app.MapControllers();

app.MapGet("/", () => "Hello World!");

app.Run();

我见过微软的人做这样的事情:

public class EmployeeApi
{
    public static void MapRoutes(IEndpointRouteBuilder routes)
    {
        routes.MapGet("/api/employees", async  ([FromServices] AppDbContext db) =>
        {
            return await db.Employees.ToListAsync();
        });

        routes.MapGet("api/employees/{id}", async (int id, [FromServices] AppDbContext db) =>
        {
            return await db.Employees.FindAsync(id);
        });
    }
}

他们创建了一个新班级。但我不知道如何实现这一点,以便程序知道这些路由存在。

【问题讨论】:

    标签: c# .net asp.net-core .net-6.0


    【解决方案1】:

    您可以创建一个扩展方法并在您的program.cs 文件中调用它:

    public static class EmployeeApi
    {
        public static void MapEmployeesRoutes(this IEndpointRouteBuilder app)
        {
            app.MapGet("/api/employees", async  ([FromServices] AppDbContext db) =>
            {
                return await db.Employees.ToListAsync();
            });
    
            app.MapGet("api/employees/{id}", async (int id, [FromServices] AppDbContext db) =>
            {
                return await db.Employees.FindAsync(id);
            });
        }
    }
    

    并在您的 program.cs 文件中调用您的方法:

    app.MapGet("/", () => "Hello World!");
    app.MapEmployeesRoutes();
    

    您的program.cs 文件应该是这样的:

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.AddControllers(); 
    
    var app = builder.Build();
    
    // Configure the HTTP request pipeline.
    if (builder.Environment.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    
    app.MapControllers(); 
    app.MapGet("/", () => "Hello World!"); 
    app.MapEmployeesRoutes();
    
    app.Run();
    public static class EmployeeApi
    {
        public static void MapEmployeesRoutes(this IEndpointRouteBuilder app)
        {
            app.MapGet("/api/employees", async  ([FromServices] AppDbContext db) =>
            {
                return await db.Employees.ToListAsync();
            });
    
            app.MapGet("api/employees/{id}", async (int id, [FromServices] AppDbContext db) =>
            {
                return await db.Employees.FindAsync(id);
            });
        }
    }
    

    【讨论】:

    • app.MapEmployeesRoutes() 出现错误; Visual Studio 无法识别。我已经导入了所有用途。
    • C:\Users\chad\source\repos\MainSolution\FromScratchApi\Program.cs(50,5):错误 CS1061:“WebApplication”不包含“MapEmployeeApi”的定义且无法访问可以找到接受“WebApplication”类型的第一个参数的扩展方法“MapEmployeeApi”(您是否缺少 using 指令或程序集引用?) [C:\Users\chad\source\repos\MainSolution\FromScratchApi\FromScratchApi.csproj]
    • @ChadLomax 在你的问题中显示你所有的程序文件
    • 关键是把它从 Program.cs 文件中取出
    • 这是扩展方法所需的关键魔法
    猜你喜欢
    • 2023-01-09
    • 2022-06-11
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2022-09-28
    • 2019-08-06
    相关资源
    最近更新 更多