传递到ASP.NET Core 2.2中[FromForm]使用的模型时,GUID列表为空

问题描述 投票:3回答:2

编辑:

问题与SWAGGER有关。看看我自己修复的答案。

我目前遇到一些问题,通过使用HTTP POST和[FromForm]将GUID列表传递给控制器​​操作。

GUID列表是EMPTY。如果我尝试将其转换为字符串列表,而不是具有3个值,则列表中只显示1个值,它是包含3个值但以逗号分隔的字符串。

我之所以使用[FromForm],是因为我需要上传一个文件,但是还要将一些其他数据传递给该操作。

我创建了一个示例项目,当您使用Kestrel调试应用程序时使用swagger。

bug端点需要一个GUID列表和一个字符串列表,并输出您发布的内容。当你发布2个guid和2个字符串时,你应该期望它们都被打印出来。在这种情况下,找到并打印0个guid,并打印1个字符串,其中包含您发布的值但以逗号分隔。 works端点使用[FromBody]并且工作正常。

这是项目:https://github.com/sander1095/FromFormGuidListBug

对于不想看项目的人:

控制器:

[HttpPost("bug")]
public ActionResult<string> Bug([FromForm] BugModel bugModel)
{
    var message = GetMessage(bugModel);

    return Ok(message);
}

模型:

public class BugModel
{
    /// <summary>
    /// If you send a GUID it will not appear in this list
    /// </summary>
    public IEnumerable<Guid> Ids { get; set; }


    /// <summary>
    /// If you send 3 strings, the list will contain 1 entry with the 3 string comma separated.
    /// </summary>
    public IEnumerable<string> IdsAsStringList { get; set; }
}

CURL电话:curl -X POST "https://localhost:5001/api/Bug/bug" -H "accept: text/plain" -H "Content-Type: multipart/form-data" -F "Ids="9dfb212a-a215-4991-9452-3ddf90e21ec0","9dfb212a-a215-4991-9452-3ddf90e21ec0"" -F "IdsAsStringList="9dfb212a-a215-4991-9452-3ddf90e21ec0","9dfb212a-a215-4991-9452-3ddf90e21ec0""

结果:

Ids是空的,而IdsAsStringList包含1个值(而不是2),这是2个字符串传递到1个逗号分隔值。

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

看来我的问题在于Swagger,而不是ASP.NET Core

当我执行以下CURL命令时,东西工作:

curl -X POST "https://localhost:5001/api/Bug/bug" -H "accept: text/plain" -H "Content-Type: multipart/form-data" -F "Ids="9dfb212a-a215-4991-9452-3ddf90e21ec0"" -F "Ids="9dfb212a-a215-4991-9452-3ddf90e21ec0"" -F "IdsAsStringList="9dfb212a-a215-4991-9452-3ddf90e21ec0","9dfb212a-a215-4991-9452-3ddf90e21ec0""

这里的区别在于,而不是使用 -F "Ids="9dfb212a-a215-4991-9452-3ddf90e21ec0","9dfb212a-a215-4991-9452-3ddf90e21ec0"", 我用 -F "Ids="9dfb212a-a215-4991-9452-3ddf90e21ec0"" -F "Ids="9dfb212a-a215-4991-9452-3ddf90e21ec0""(重复的Ids字段。)

我在swagger repo https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1107上创建了一个问题


0
投票

我认为你的要求就是问题所在。发布列表时,我总是将索引添加到列表中每个元素的名称。尝试将Ids的名称更改为Ids [0] =“firstguidhere”Ids = [1] =“secondguidhere”。

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