2016-12-20 2 views
0

Я пытаюсь получить что-то похожее на this answer и this answer для работы, где я использую Invoke-RestMethod, чтобы опубликовать некоторые переменные и список файлов для контроллера. Тем не менее, AFAICT я правильно адаптировал бит powershell, но контроллер MVC ему не нравится.Контроллер MVC не получает данные, отправленные с Invoke-RestMethod

Репродукция. В свежем, новое приложение MVC 5, я добавил этот метод к главному контроллеру:

[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

Я приветствую любой с конкурирующим ответом, но до этого момента я не буду утверждать, что это не (легко) можно с помощью простого Invoke-RestMethod командлета, по крайней мере, не обернув его в другой функции, которая создает многосекционную форма.

В основном это означает использование my answer to the question I mentioned above, при использовании этого командлета можно просто назвать его так:

$url ="http://localhost:62441/home/upload" 
$form = @{ description = "Test upload." } 
Get-ChildItem .\MyStuff.dll | Send-MultiPartFormToApi $url $form 
Смежные вопросы