有没有一种方法可以在 .NET 6 的 swagger 中发送查询参数数组中的空字符串?

问题描述 投票:0回答:1

我在 NET6.0 控制器端点上工作,我希望用户能够提供两个查询参数,这两个参数将是字符串数组。其中一个数组应该要求数组中的所有项目都有一个值(一个 guid),而另一个应该能够接受 null 或空值。

下面是我目前的代码:

程序.cs

services.AddSwaggerGen(options =>
{
    options.SupportNonNullableReferenceTypes();
}

NewController.cs

[ApiController]
[ApiVersion("1.0")]
[Route("company/v{api-version:apiVersion}/[controller]")]
public class NewController : ControllerBase
{
    [HttpGet("{entityId:int}/lookup")]
    public IActionResult LookUpBeforeCreate(
        [FromRoute] int entityId,
        [BindRequired, FromQuery(Name = "attr")] IEnumerable<Guid> attributes,
        [BindRequired, FromQuery(Name = "val")] IEnumerable<string?> values)
    {
        Console.WriteLine("attributeGuids:");
        foreach (var guid in attributes)
        {
            Console.WriteLine($"Id: {guid}");
        }

        Console.WriteLine("attributeValues:");
        foreach (var value in values)
        {
            if (value is null)
            {
                Console.WriteLine($"Value is null");
            }
            else if (value.Equals(string.Empty))
            {
                Console.WriteLine($"Value is empty");
            }
            else
            {
                Console.WriteLine($"Value: {value}");
            }
        }

        return Ok();
    }
}

当前招摇页面:

目前,我无法发送空字符串,只能通过将 swagger 字段留空来发送空值。有什么方法可以配置端点/swagger 以允许我发送空值和空值?

c# .net asp.net-core swagger swagger-ui
1个回答
0
投票

通过将 swagger 字段留空,httpcontex 中的值是空的,但它在控制器参数中被转换为 null。
所以你可以像

一样直接使用
values = Request.Query["val"]

public IActionResult LookUpBeforeCreate(
            [FromRoute] int entityId,
            [BindRequired, FromQuery(Name = "attr")] IEnumerable<Guid> attributes,
            [BindRequired, FromQuery(Name = "val")] IEnumerable<string?> values)
        {
            values = Request.Query["val"];
            ...

然后,当您将 swagger 字段留空时,值输出为空。

© www.soinside.com 2019 - 2024. All rights reserved.