我正在尝试使用与this answer和this 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,但这是我想要避免的相当多的工作,并且从一开始提到的答案给出我怀疑它应该实际上是可能的?
答案 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