Azure Functions 和 Swagger UI - 如何在 swagger UI 中显示查询字符串参数?

Posted

技术标签:

【中文标题】Azure Functions 和 Swagger UI - 如何在 swagger UI 中显示查询字符串参数?【英文标题】:Azure Functions and Swagger UI - How to display query string paramters in swagger UI? 【发布时间】:2020-12-22 14:17:49 【问题描述】:

我有以下由 HTTP 触发的 Azure 函数。我已经使用此链接here 为我的端点设置了 Swagger。以下 API 需要一组查询字符串参数,即 “name”、“email”、“phone”,因此它可以对目标对象进行一些搜索。目前该功能的主体当然没有实现,但这对于这个问题并不重要。

我的问题:如何在 swagger UI 中显示查询字符串参数?

功能:

[FunctionName(nameof(GetBookingCalendarsFunction))]
 public async Task<IActionResult> GetAllAsync(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET", Route = "bookings")] HttpRequest request,
        ILogger log)
    
        log.LogInformation("C# HTTP trigger function processed a request.");

        return new OkObjectResult($"Name: request.Query["name"], email: request.Query["email"], phone: request.Query["phone"]");
    

此功能的招摇用户界面

注意:我不想使用路由值代替查询字符串参数,因为这些参数是可选的,调用者可能不想提供其中之一。 p>

例如,我尝试了以下方法,但如果您删除任何参数,它将失败并显示 404,因为它将它们作为路由的一部分(即使它会在 Swagger 中显示它们)

  [FunctionName(nameof(GetBookingCalendarsFunction))]
    public async Task<IActionResult> GetAllAsync(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET", Route = "bookings/name=name&email=email&phone=phone")] HttpRequest request,
        string name, string email, string phone,
        ILogger log)
    
        log.LogInformation("C# HTTP trigger function processed a request.");

        return new OkObjectResult($"Name: request.Query["name"], email: request.Query["email"], phone: request.Query["phone"]");
    

我已经在谷歌上搜索了几个小时,但到目前为止找不到任何有用的东西。感谢您的帮助。

【问题讨论】:

您很可能需要使用您正在使用的 SwashBuckle 包中的某种形式的属性来装饰您的函数定义。 [FromQuery] HttpRequest request 工作吗? 【参考方案1】:

由于您使用包AzureExtensions.Swashbuckle将Swagger集成到Azure功能中,我们可以根据您的需要使用属性QueryStringParameter来配置查询字符串。更多详情请参考here

例如

 [FunctionName("GetBookingCalendarsFunction")]
        [QueryStringParameter("name", "this is name", DataType = typeof(string), Required = false)]
        [QueryStringParameter("email", "this is email", DataType = typeof(string), Required = false)]
        [QueryStringParameter("phone", "this is phone", DataType = typeof(string), Required = false)]
        public static async Task<IActionResult> GetAllAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "bookings")] HttpRequest req,
            ILogger log)
        
            log.LogInformation("C# HTTP trigger function processed a request.");

           

            return new OkObjectResult($"Name: req.Query["name"], email: req.Query["email"], phone: req.Query["phone"]");
        

【讨论】:

以上是关于Azure Functions 和 Swagger UI - 如何在 swagger UI 中显示查询字符串参数?的主要内容,如果未能解决你的问题,请参考以下文章

Azure Functions - 使用 Azure Functions 的表存储触发器

Azure Functions - Python(Blob 触发器和绑定)

Azure Functions 与 Azure 流分析

Azure Functions 未在本地创建 Azure 表列

Azure Functions - 根据事件类型阻止处理 Azure 服务总线消息

Azure基础:何时使用Azure Functions无服务器计算(11)