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

如何为C# Azure Function的Swagger UI GET参数添加定义与示例?

为Azure Function的GET参数添加Swagger说明与示例

要给C# Azure Function的Swagger文档补充参数定义、示例,推荐使用Microsoft.Azure.WebJobs.Extensions.OpenApi扩展包,这是Azure官方支持的OpenAPI/Swagger生成工具,以下是具体实现步骤:

1. 安装必要NuGet包

通过.NET CLI或NuGet包管理器安装:

dotnet add package Microsoft.Azure.WebJobs.Extensions.OpenApi

2. 启用XML文档生成

右键项目 → 属性 → 生成 → 勾选「XML文档文件」,指定生成路径(例如bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml)。Swagger会读取这些XML注释生成参数说明。

3. 修改Function代码,添加参数元数据

在Function方法和参数上添加XML注释,同时使用[OpenApiParameter]等属性配置Swagger专属的示例、描述信息:

using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Attributes;
using Microsoft.OpenApi.Models;
using System.Net;

/// <summary>
/// 获取队列及现场客户信息
/// </summary>
/// <param name="req">HTTP请求消息</param>
/// <param name="client">CosmosDB文档客户端</param>
/// <param name="companyId">公司唯一ID</param>
/// <param name="branchId">分支门店ID</param>
/// <param name="waitingFields">等待队列需返回的字段(逗号分隔)</param>
/// <param name="calledFields">已叫号客户需返回的字段(逗号分隔)</param>
/// <param name="log">日志记录器</param>
/// <returns>客户队列数据响应</returns>
[OpenApiOperation(operationId: "GetCustomersInQueuesAndField", 
                  tags: new[] { "客户队列" }, 
                  Summary = "查询队列与现场客户信息", 
                  Description = "按公司、分支筛选,指定返回字段,从CosmosDB获取客户队列数据")]
[OpenApiParameter(name: "companyId", 
                  In = ParameterLocation.Path, 
                  Required = true, 
                  Type = typeof(string), 
                  Summary = "公司唯一标识", 
                  Description = "用于区分不同企业的业务数据", 
                  ExampleValue = "COMP001")]
[OpenApiParameter(name: "branchId", 
                  In = ParameterLocation.Path, 
                  Required = true, 
                  Type = typeof(string), 
                  Summary = "分支门店标识", 
                  Description = "区分同一公司下的不同门店/网点", 
                  ExampleValue = "BRANCH001")]
[OpenApiParameter(name: "waitingFields", 
                  In = ParameterLocation.Path, 
                  Required = true, 
                  Type = typeof(string), 
                  Summary = "等待队列返回字段", 
                  Description = "多个字段用英文逗号分隔,指定需查询的等待队列相关字段", 
                  ExampleValue = "CustomerName,QueueNumber,WaitTime")]
[OpenApiParameter(name: "calledFields", 
                  In = ParameterLocation.Path, 
                  Required = true, 
                  Type = typeof(string), 
                  Summary = "已叫号返回字段", 
                  Description = "多个字段用英文逗号分隔,指定需查询的已叫号客户相关字段", 
                  ExampleValue = "ServiceType,CounterNumber,CalledTime")]
[OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, 
                         contentType: "application/json", 
                         bodyType: typeof(IEnumerable<CustomerInfo>), 
                         Summary = "查询成功", 
                         Description = "返回符合条件的客户队列详情")]
public async Task<HttpResponseMessage> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "GetCustomersInQueuesAndField/{companyId}/{branchId}/waitingfields/{waitingFields}/calledfields/{calledFields}")] HttpRequestMessage req,
    [CosmosDB(databaseName: "COSMOS:DATABASE",
       collectionName: "COSMOS:LATCH_TRIGGER_ITEMS_CONTAINER",
       ConnectionStringSetting: "COSMOS:CONNECTION_STRING"
    )] DocumentClient client,
    string companyId,
    string branchId,
    string waitingFields,
    string calledFields,
    ILogger log)
{
    // 原有业务逻辑代码
    return req.CreateResponse(HttpStatusCode.OK, /* 返回数据 */);
}

/// <summary>
/// 客户队列信息模型
/// </summary>
public class CustomerInfo
{
    /// <summary>
    /// 客户姓名
    /// </summary>
    [OpenApiProperty(Summary = "客户姓名", Description = "等待/已叫号客户的姓名", Example = "张三")]
    public string CustomerName { get; set; }

    /// <summary>
    /// 队列编号
    /// </summary>
    [OpenApiProperty(Summary = "队列编号", Description = "客户在等待队列中的序号", Example = "Q005")]
    public string QueueNumber { get; set; }

    // 按需添加其他属性及注释
}

4. 配置OpenApi(根据Function宿主模型)

进程内模型(In-Process)

添加Startup.cs类配置OpenApi:

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;

[assembly: FunctionsStartup(typeof(YourNamespace.Startup))]
namespace YourNamespace
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.AddOpenApi();
        }
    }
}

隔离进程模型(Isolated Worker)

在Program.cs中启用OpenApi:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureOpenApi()
    .Build();

host.Run();

5. 查看效果

运行Function后,访问地址:https://<你的Function域名>/api/swagger/ui,即可看到带参数说明、示例的Swagger界面,与你期望的效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:15:01