我在 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 以允许我发送空值和空值?
通过将 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"];
...