При получении данных из Powershell параметры действия ASP.NET MVC равны нулю. - PullRequest
3 голосов
/ 10 апреля 2019

Я попытался понять, как 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 ноль.

Я до сих пор не понимаю, почему я получаю ноль.Где моя ошибка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...