MVC控制器未接收使用Invoke-RestMethod发布的数据

时间:2016-12-20 08:54:03

标签: asp.net-mvc powershell

我正在尝试使用与this answerthis answer类似的功能,以便利用Invoke-RestMethod将一些变量和文件列表发布到控制器。但是,AFAICT我正确地改编了powershell位,但是MVC控制器不喜欢它。

这是一个复制品。在一个全新的MVC 5应用程序中,我已将此方法添加到Home控制器:

[HttpPost]
public ActionResult Upload(string description, HttpPostedFileBase[] files)
{
    if (string.IsNullOrWhiteSpace(description)) return Content("Description is required");
    if (files == null || !files.Any()) return Content("At least one file required");
    return Content("Dummy success.");
}

我试着这样说:

$baseUri = "http://localhost:62441"

$body = @{
    "description" = "Test upload."
    "files" = Get-Content("MyStuff.dll") -Raw
}

Invoke-RestMethod `
    -Method Post `
    -Uri "$baseUri/home/upload" `
    -Body $body `
    -ContentType "multipart/form-data"

# Outputs "Description is required"

这是上述(和其他各种)答案的混音。但是,如果我运行脚本,MVC端会获得一个空的description和一个空的文件列表。

MVC操作中的某些内容会导致此问题吗?我怎样才能调整代码(最好是 powershell 位)以使其工作?

PS。我已经发现this answer解释了如何自定义构建Body,但这是我想要避免的相当多的工作,并且从一开始提到的答案给出我怀疑它应该实际上是可能的?

1 个答案:

答案 0 :(得分:0)

我欢迎任何有争议答案的人,但在此之前,我会声称使用普通Invoke-RestMethod cmdlet可以 (很容易),至少在没有包装它的情况下在另一个构建多部分表单的函数中。

这基本上意味着使用my answer to the question I mentioned above,在使用该cmdlet时,您可以像这样调用它:

$url ="http://localhost:62441/home/upload"
$form = @{ description = "Test upload." }
Get-ChildItem .\MyStuff.dll | Send-MultiPartFormToApi $url $form