没有给定的参数对应于 'Interface.Create(Trademark, IFormFile)' 的要求的形参 'photo'?

There is no argument given that corresponds to the required formal parameter 'photo' of 'Interface.Create(Trademark, IFormFile)'?

我正在使用 .Net Core 5 并为我的商标上传图片。我在我的工作中使用存储库并收到错误 CS706:没有给定的参数对应于 Controller

中 'Interface.Create(Trademark, IFormFile)' 的必需形式参数 'photo'
_trademarkRepo.CreateNewTrademark(trademark);

控制器

public IActionResult CreateTrademark(Trademark trademark)
    {
        if(ModelState.IsValid)
        {
            _trademarkRepo.CreateNewTrademark(trademark);
        }
        _logger.LogInformation("...");
        return RedirectToAction("Index");
    }

回购

public bool CreateNewTrademark(Trademark trademark, IFormFile photo)
    {
        var path = Path.Combine(this._webHostEnvironment.WebRootPath, "trademarks", photo.FileName);
        var stream = new FileStream(path, FileMode.Create);
        photo.CopyToAsync(stream);
        if(CheckExist(trademark.TrademarkName))
        {
            return false;
        }
        var newTrademark = new Trademark
        {
            TrademarkName = trademark.TrademarkName,
            Description = trademark.Description,
            Image = photo.FileName
        };
        _dbContext.Trademarks.Add(newTrademark);
        _dbContext.SaveChanges();
        return true;
    }

从错误中可以看出是什么错误。

  1. repo 级别的方法需要两个参数。一个是商标,一个是照片。

  2. 当您从控制器调用它时,您只传递了一个。 (仅商标,缺少照片)。这是错误。

基本上你的控制器应该如下所示。

public IActionResult CreateTrademark(Trademark trademark,IFromFile photo)
    {
        if(ModelState.IsValid)
        {
            _trademarkRepo.CreateNewTrademark(trademark,photo);
        }
        _logger.LogInformation("...");
        return RedirectToAction("Index");
    }

注意:还有许多其他依赖项,例如您如何从 UI 中 post 文件等。这不是此问题的范围,因此请回答。你必须寻找那些细节。