【问题标题】:'HttpRequest' does not contain a definition for 'Files' [duplicate]“HttpRequest”不包含“文件”的定义[重复]
【发布时间】:2016-01-12 12:09:16
【问题描述】:

我有一种发布方法,其中有一个文件上传控件。要在控制器中获取上传的文件,我收到如下错误:

Error   CS1061  'HttpRequest' does not contain a definition for 'Files' and no extension method 'Files' accepting a first argument of type 'HttpRequest' could be found (are you missing a using directive or an assembly reference?)

我的代码如下:

[ValidateAntiForgeryToken]
        [HttpPost]
        public async Task<IActionResult> TeamUserDetail(TeamUsers model)
        {
            var file = Request.Files[0];
            return View();
        }

在 Request.Files[0] 它给出了上面显示的错误。项目中使用MVC6。

请指导我。我是否缺少任何要添加的参考?

谢谢

【问题讨论】:

标签: c# file-upload http-post httprequest


【解决方案1】:

MVC 6 使用了另一种机制来上传文件。您可以在GitHubother sources 上获得更多示例。只需使用 IFormFile 作为您的操作的参数:

public FileDetails UploadSingle(IFormFile file)
{
    FileDetails fileDetails;
    using (var reader = new StreamReader(file.OpenReadStream()))
    {
        var fileContent = reader.ReadToEnd();
        var parsedContentDisposition = ContentDispositionHeaderValue.Parse(file.ContentDisposition);
        fileDetails = new FileDetails
        {
            Filename = parsedContentDisposition.FileName,
            Content = fileContent
        };
    }

    return fileDetails;
}

[HttpPost]
public async Task<IActionResult> UploadMultiple(ICollection<IFormFile> files)
{
    var uploads = Path.Combine(_environment.WebRootPath,"uploads"); 
    foreach(var file in files)
    {
        if(file.Length > 0)
        {
            var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
            await file.SaveAsAsync(Path.Combine(uploads,fileName));
        }
    }
    return View();
}

您可以在asp.net sources 中查看IFormFile 的当前合约。

【讨论】:

  • 这可能已经过时了,但是返回应该在foreach-loop之外
  • @codeshinobi 已修复 ^_^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 2019-09-10
相关资源
最近更新 更多