Я попытался понять, как Powershell отправляет данные на сервер, и я создал проект ASP.NET MVC и отдельно скрипт Powershell.
Действие MVC выглядит следующим образом:
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file, string name, string description, string descr)
{
return new EmptyResult();
}
иСкрипт Powershell, который должен загрузить файл вместе с некоторой информацией:
Add-Type -AssemblyName "System.Web"
$mainUrl= "http://localhost:27701";
function upload {
param(
[string]$filePath,
[string]$description,
[string]$genre
)
if(![System.IO.File]::Exists($filePath)) {
Write-Error "$filePath does not exist";
return;
}
$url = $mainUrl + "/Home/Upload";
$name = [System.IO.Path]::GetFileNameWithoutExtension($filePath);
$filename = [System.IO.Path]::GetFileName($filePath);
$dt = [DateTime]::Now.Ticks.ToString("x", [System.Globalization.NumberFormatInfo]::InvariantInfo);
$boundary = "---------------------------$dt";
$fileBytes = [System.IO.File]::ReadAllBytes($filePath);
$fileEnc = [System.Text.Encoding]::GetEncoding('UTF-8').GetString($fileBytes);
$fileContentType = [System.Web.MimeMapping]::GetMimeMapping($filename);
$newLine = "`r`n";
$bodyLines = (
"--$boundary",
"Content-Disposition: form-data; name=`"file`"; filename=`"$filename`"",
"Content-Type: $fileContentType$newLine",
$fileEnc,
"--$boundary",
"Content-Disposition: form-data; name=`"name`"$newLine",
$name,
"--$boundary",
"Content-Disposition: form-data; name=`"description`"$newLine",
$genre,
"--$boundary",
"Content-Disposition: form-data; name=`"descr`"$newLine",
$description,
"--$boundary"
) -join $newLine;
$contentType = "multipart/form-data";
$params1 = @{
"name" = $name;
"description" = $description;
"descr" = $genre;
"file" = Get-Item $filePath;
}
Invoke-WebRequest -Uri $url -Method Post -Body $params1 -ContentType $contentType;
}
upload -filePath "C:\test.txt" -description "Test" -genre "genre";
Я пробовал оба пути: -Body $params1
и -Body $bodyLines
, я все еще получаю file
, name
, description
и descr
ноль.
Я до сих пор не понимаю, почему я получаю ноль.Где моя ошибка?