编辑:
与骗子的问题所在。请参阅我自己的修复程序。
我目前在使用HTTP POST和[FromForm]
将GUID列表传递给控制器操作时遇到一些问题。
指导清单为EMPTY。如果我尝试将其转换为字符串列表,而不是具有3个值,则列表中仅显示1个值,并且它是包含3个值但用逗号分隔的字符串。
我使用[FromForm]的原因是因为我需要上传文件,但还要将其他一些数据传递给操作。
我创建了一个示例项目,当您使用Kestrel调试应用程序时,该项目将使用swagger。bug
端点需要一个GUID列表和一个字符串列表,并输出您发布的内容。当您发布2个Guid和2个字符串时,您应该期望它们都将被打印出来。在这种情况下,找到并打印了0个向导,并且打印了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个逗号分隔的值。 最佳答案
看来我的问题在于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
字段。)
我在招摇回购https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1107上创建了一个问题