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

如何在Azure Function中集成ASP.NET Core Minimal API?

将ASP.NET Core Minimal API集成到Azure Functions的实现方案

Azure Functions没有和AWS Lambda的Amazon.Lambda.AspNetCoreServer.Hosting完全对等的包,但可以通过HTTP触发器+ASP.NET Core请求管道适配的方式,把Minimal API的端点逻辑无缝集成进来,实现和AWS类似的效果。

具体实现步骤

1. 准备项目与依赖

  • 创建Azure Functions项目(选择HTTP触发器模板,运行时选v4)
  • 安装必要的NuGet包:Microsoft.AspNetCore.Http、Microsoft.AspNetCore.Routing、Microsoft.Azure.Functions.Worker.Extensions.Http,版本和你的Minimal API保持一致

2. 定义Minimal API端点

新建静态类封装Minimal API路由逻辑,写法和普通Minimal API完全一致:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;

public static class ApiEndpoints
{
    public static IEndpointRouteBuilder MapMyApi(this IEndpointRouteBuilder builder)
    {
        builder.MapGet("/api/health", () => Results.Ok(new { Status = "Healthy" }));
        builder.MapPost("/api/users", (User user) => Results.Created($"/api/users/{user.Id}", user));
        // 在这里添加你的所有Minimal API端点
        return builder;
    }
}

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}

3. 适配Azure Functions与ASP.NET Core管道

修改Function启动逻辑,初始化ASP.NET Core的路由和中间件:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Routing;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        // 添加ASP.NET Core路由服务
        services.AddRouting();
        // 可在此添加Minimal API需要的其他服务,比如认证、日志
        services.AddAuthorization();
    })
    .Configure(app =>
    {
        // 构建路由并挂载自定义API端点
        var routeBuilder = new RouteBuilder(app.ApplicationServices);
        routeBuilder.MapMyApi();
        var router = routeBuilder.Build();
        app.UseRouter(router);
    })
    .Build();

host.Run();

4. 配置HTTP触发器路由

修改HTTP触发器属性,设置Route = "{*route}",让所有请求都转发到Minimal API的路由系统:

using Microsoft.AspNetCore.Http;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using System.Threading.Tasks;

public class ApiFunction
{
    private readonly IMiddleware _middleware;

    public ApiFunction(IMiddleware middleware)
    {
        _middleware = middleware;
    }

    [Function("MinimalApiProxy")]
    public async Task<HttpResponseData> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", "put", "delete", Route = "{*route}")] HttpRequestData req)
    {
        // 转换Azure Functions请求为ASP.NET Core HttpContext
        var httpContext = req.CreateHttpContext();
        // 交给ASP.NET Core管道处理请求
        await _middleware.InvokeAsync(httpContext, _ => Task.CompletedTask);
        // 转换回Azure Functions响应格式
        return httpContext.Response.ToHttpResponseData(req);
    }
}

关键注意点

  • 必须使用Azure Functions v4运行时,v3及以下版本不支持这种集成方式
  • 可以直接复用Minimal API的中间件,比如UseAuthentication()、UseAuthorization(),只需在Configure方法中添加对应配置
  • 本地调试时,启动Azure Functions项目后,直接访问Minimal API端点(如http://localhost:7071/api/health)即可测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:22:43