You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core 8.0中通过Program.cs配置API路由而非控制器特性

在ASP.NET Core 8.0中通过UseEndpoints映射API控制器动作

第一步:修改控制器代码

先移除控制器类上的[Route]特性,若原有[ApiController]可保留(它能提供自动模型验证等API专属特性)。示例代码如下:

using Microsoft.AspNetCore.Mvc;

public class HomeController : ControllerBase
{
    // 移除原有[HttpGet]等路由特性,HTTP方法可在UseEndpoints中配置
    public IActionResult Home()
    {
        return Ok("Hello from Home method");
    }

    // 示例:另一个动作方法
    public IActionResult Create()
    {
        return Ok("Create action triggered");
    }
}

第二步:配置Program.cs中的UseEndpoints

注意中间件顺序:必须先调用app.UseRouting(),再调用app.UseEndpoints()。以下提供两种配置方式:

方式一:精准映射单个路由到指定动作

如果只想把/api/home映射到HomeController的Home方法,并限定为GET请求,可这样写:

var builder = WebApplication.CreateBuilder(args);

// 注册控制器服务
builder.Services.AddControllers();

var app = builder.Build();

// 路由中间件顺序不能错
app.UseRouting();

app.UseEndpoints(endpoints =>
{
    // 映射GET请求的/api/home到HomeController的Home方法
    endpoints.MapMethods("/api/home", new[] { "GET" }, context =>
    {
        var controller = context.RequestServices.GetRequiredService<HomeController>();
        return controller.Home();
    });

    // 示例:映射POST请求的/api/home/create到Create方法
    endpoints.MapMethods("/api/home/create", new[] { "POST" }, context =>
    {
        var controller = context.RequestServices.GetRequiredService<HomeController>();
        return controller.Create();
    });
});

app.Run();

方式二:用模板批量映射控制器动作

如果需要批量匹配控制器的多个动作,可使用MapControllerRoute定义路由模板:

app.UseEndpoints(endpoints =>
{
    // 定义路由模板:api/{控制器名}/{动作名}
    endpoints.MapControllerRoute(
        name: "api_route",
        pattern: "api/{controller}/{action}",
        defaults: new { controller = "Home", action = "Home" } // 设置默认路由
    );
});

这种配置下,/api/home/home会匹配HomeController的Home方法,/api/home/create匹配Create方法;若想让/api/home直接指向Home方法,可单独添加一个精准映射补充。

常见问题排查

  • 确保控制器和动作方法都是public访问级别,否则路由系统无法访问。
  • 检查中间件顺序:UseRouting必须在UseEndpoints之前调用,否则路由无法解析。
  • 确认已调用builder.Services.AddControllers(),否则控制器无法被依赖注入容器实例化。
  • 若保留[ApiController],需注意它的隐含路由规则,避免与UseEndpoints的配置冲突。

内容的提问来源于stack exchange,提问作者hamza ennaji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:33:19