web-dev-qa-db-ja.com

asp.netコアWeb APIファイルのアップロードとメソッドに渡す「フォームデータ」複数のパラメーター

ファイルをパラメーターとして受け取るエンドポイントを作成しました。

    [HttpPost("[action]")]
    [Consumes("multipart/form-data")]
    public ActionResult UploadImage(IFormFile  Files, string param)
    {

        long size = Files.Length;            
        var tempPath = Path.GetTempFileName();
        string file_Extension = Path.GetExtension(Files.FileName);                   
        var isValidFile = FileValidation.FileUploadValidation(Files);
        if (isValidFile.data)
        {
            string filename = Guid.NewGuid() + "" + file_Extension;
            return null;

        }
        else
        {
            return null;
        }
    }

問題なくファイルを取得できません。同じメソッドにさらにテキストパラメータを追加するにはどうすればよいですか?

Debug View param parameter is null

Postmen call

7
[HttpPost("[action]")]
[Consumes("multipart/form-data")]
public IActionResult UploadImage([FromForm] FileInputModel Files)
{

    return Ok();
}

public class FileInputModel 
{
    public IFormFile File { get; set; }
    public string Param { get; set; }
}

追加する必要があります[FormFrom]追加後のパラメータモデルの前[FormFrom]コードは完全に機能します。

0

100%動作します。テスト済み。以下の手順を実行してください。

次のようにモデルのカスタムクラスを作成する必要があります

public class FileInputModel
{
    public string Name { get; set; }
    public IFormFile FileToUpload { get; set; }
}

のような形

<form method="post" enctype="multipart/form-data" asp-controller="Home" asp-action="UploadFileViaModel" >
    <input name="Name" class="form-control" />
    <input name="FileToUpload" type="file" class="form-control" />
    <input type="submit" value="Create" class="btn btn-default" />
</form>

とコントローラのような

[HttpPost]
public async Task<IActionResult> UploadFileViaModel([FromForm] FileInputModel model)
{
    if (model == null || model.FileToUpload == null || model.FileToUpload.Length == 0)
        return Content("file not selected");

    var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", model.FileToUpload.FileName);

    using (var stream = new FileStream(path, FileMode.Create))
    {
        await model.FileToUpload.CopyToAsync(stream);
    }

    return RedirectToAction("Files");
}
3

私は次のコードでテストし、それは動作します:

public class TestController : Controller
{
    [HttpPost("[controller]/[action]")]
    public IActionResult Upload(Model model)
    {
        return Ok();
    }

    public class Model
    {
        public IFormFile File { get; set; }
        public string Param { get; set; }
    }
}

モデルを使用する必要があることに注意してください。

以下は、同じ属性を持つ郵便配達員のスクリーンショットです。

Postman screenshot below

[〜#〜] update [〜#〜]複数のファイルの場合:

モデルを次のように変更します。

public class Model
{
    public List<IFormFile> Files { get; set; }
    public string Param { get; set; }
}

郵便配達のスクリーンショット: Multipart form content

更新2

コンテンツタイプヘッダーはmultipart/form-data

これが機能しているスクリーンショットです:

Working Code

0
Anton Toshik