首页 > 解决方案 > 没有给出与“Interface.Create(Trademark, IFormFile)”所需的形式参数“photo”相对应的参数?

问题描述

我正在使用 .Net Core 5 并为我的商标上传图片。我为我的工作使用存储库并收到错误 CS706: 没有给出与控制器中 '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;
    }

标签: asp.net-core-mvcrepository-patterniformfile

解决方案


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

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

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

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

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

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


推荐阅读