【问题标题】:Post action not working in controller but working in another controller发布操作在控制器中不起作用但在另一个控制器中起作用
【发布时间】:2021-04-30 21:23:26
【问题描述】:

我有一个允许用户创建新项目的项目。 UI 有一些文本框和一个提交按钮。它通过 POST 请求将数据发送到 api 调用,然后在数据库中创建一个新的项目实体。我删除了我的迁移,然后添加了一个新的迁移,因为我想修复一些代码,但现在 post 操作不再有效。我在控制台中看到以下错误消息 -

System.InvalidOperationException:无法解析服务类型 尝试激活时出现“AutoMapper.IMapper” 'IssueTracker.Controllers.ProjectController'。

创建新项目

// POST api/values
[HttpPost]
public void Post([FromBody] Projects project)
{
    _repository.CreateProject(project);
    _repository.SaveChanges();
}

项目模型

public class Projects
{
    public Projects(string name, string description)
    {
        this.name = name;
        this.description = description;
    }

    public Projects()
    {
        //
    }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public string id { get; set; }
    
    [Required]
    public string name { get; set; }
    
    [Required]
    public string description { get; set; } 
}

【问题讨论】:

  • 您在 API 端收到的 name 和 description 属性的值是什么?
  • @atiyar 所以我只是查看了控制台中的错误,它说System.InvalidOperationException: Unable to resolve service for type 'AutoMapper.IMapper' while attempting to activate 'IssueTracker.Controllers.ProjectController'. 当我删除自动映射器代码时,它成功发布到数据库。虽然它很奇怪,因为我很确定我安装了 automapper,但我猜它没有识别它。
  • 请编辑您的帖子并添加错误消息。

标签: c# asp.net .net asp.net-mvc entity-framework


【解决方案1】:

我建议使用 Newton.Json nuget 包,然后在没有 [FromBody] 的情况下将 ViewModel 传递回控制器。可以试试吗?

【讨论】:

  • 刚试了一下,还是不行。你为什么建议把 [FromBody] 拿出来?
【解决方案2】:

由于您的错误消息表明您已安装 AutoMapper,但依赖注入器未注册/解析它。

安装包AutoMapper.Extensions.Microsoft.DependencyInjection并在Startup.cs文件的ConfigureServices方法中添加以下行-

services.AddAutoMapper(typeof(Startup));

如果Startup 类和您的映射配置文件类/类在同一个程序集/项目中,则可以这样做。如果不是,请使用以下 -

services.AddAutoMapper(typeof(MyMappingProfileClass));

其中MyMappingProfileClass 是您定义/配置地图的映射配置文件类。

【讨论】:

    猜你喜欢
    • 2019-01-16
    • 2013-11-23
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多