可以在不事先知道字段名称的情况下将表单提交文件提交到ASP.NET Core控制器吗?

时间:2018-07-16 18:33:58

标签: c# asp.net-core

我正在使用ASP.NET Core 2.x,并且具有动态生成的表单(我不知道页面上可能有多少个字段或它们的名称是什么)。除“文件”输入外,此方法工作正常。

此表单上可能的字段类型之一是“文件”输入,允许用户将文件上传到站点。

在这种情况下,我不一定知道该字段的名称是什么,因此我需要创建一个类似于以下内容的控制器动作:

[HttpPost]
public async Task<IActionResult> HandleWorksheet()
{
    ...
    if (field.FieldType == FieldType.FileUpload)
    {
        var uploadedFile = Request.Form.Files.[field.fieldName];
    }
    ...
}

不幸的是,以上操作无效。实际上,Request.Form.Files为空。

我已经确认表单正在提交文件,并且如果我提前知道字段名称(例如“ myFieldName”)并将其放在操作的签名中,则以下代码将起作用:

[HttpPost]
public async Task<IActionResult> HandleWorksheet(IFormFile myFieldName)
{
    ...
}

我正在ASP.NET Core 2.x中尝试做些什么吗?

为什么Request.Form.Files为空?

表单正在设置enctype="multipart/form-data"属性。

1 个答案:

答案 0 :(得分:0)

更改此内容:

public async Task<IActionResult> HandleWorksheet(IFormFile myFieldName)

对此:

public async Task<IActionResult> HandleWorksheet([FromForm]IFormFile myFieldName)

这对我有用。