【问题标题】:Unable to set a value from 1 model to another using a "Put" method in Postman无法使用 Postman 中的“Put”方法将一个模型的值设置为另一个模型
【发布时间】:2023-04-04 11:26:01
【问题描述】:

我已经创建了一个有效的注册用户方法,其中用户注册到数据库。我还创建了一个有效的新包方法,它创建了一个新包。它们都可以正常工作,但是当创建用户时,他的帐户类型设置为 null,我只想将用户“accountType”设置为“PackageName”。

封装型号:

public class Packages
    {
        public int Id { get; set; }
        public string PackageName { get; set; }
        public int OrderLimit { get; set; }
        public decimal Cost { get; set; }
        public string ResetIntervalType { get; set; }
        public int ResetInterval { get; set; }
}

用户模型:

 public class AppUser : IdentityUser 
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string AccountType { get; set; }
        public int? PeriodOrderQty { get; set; }
        public int? TotalOrderQty { get; set; }
        public Guid? APIKey { get; set; }
        //added packages foreign key, connection established
        public Packages Package { get; set; }
        public Cities City { get; set; }
        public QualificationLevels Qualifications { get; set; }

    }

这是我试图实现的 put 方法,在断点每个组件之后,主要问题是映射器被设置为方法的开头。但是我不确定还能尝试什么,只是刚刚开始使用这些方法。

[HttpPut("api/auth/assignpackage/{id}")]
            public async Task<IActionResult> AssignPackage(int id ,[FromBody]Packages packageAssignValue)
            {
                try
                {
                    var assignPackage = packageAssignValue;
                    var assignUser = Mapper.Map<Packages, AppUser>(packageAssignValue);
                    assignUser.AccountType = packageToEdit.PackageName;

                    var packageToEdit = await _context.Packages
                      .AsNoTracking()
                      .SingleOrDefaultAsync(m => m.Id == id);

                    assignUser.AccountType = assignPackage.PackageName;

                    if (packageToEdit == null)
                    {
                        return NotFound("Could not update Package as it was not Found");
                    }
                    else
                    {
                        _context.Update(assignUser);
                        await _context.SaveChangesAsync();
                        return Ok(assignUser);

                    }
                }
                catch (DbUpdateException)
                {
                    //Log the error (uncomment ex variable name and write a log.)
                    ModelState.AddModelError("", "Unable to save changes. " +
                        "Try again, and if the problem persists, " +
                        "see your system administrator.");
                    return NotFound("Package not found");
                }
            }

这里是我的邮递员输入供参考:

{
        "packageName": "Bronze"
}

【问题讨论】:

  • Mapper.Map 将 Packages 转换为 AppUser? AppUser的Package属性如何设置为Packages?
  • 它不会简单地抛出 AutoMapper 异常错误,我想我可能试图以错误的方式实现它。但我知道映射器没有将 Package Property 设置为 AppUser 属性,这是本意。我希望它到达我忘记包含的这一行:[assignUser.AccountType = packageToEdit.PackageName]
  • It does not do that it simply throws an AutoMapper exception error, 请在您的帖子中更新该异常的详细信息。
  • 我修复了 AutoMapper 异常,但是我意识到我没有设置我想要将包值传递给的用户的值,因此根本不知道在哪里设置该值。
  • 能分享一下映射逻辑的代码吗?

标签: c# .net rest api postman


【解决方案1】:

通过解决自动映射器问题解决了问题,但是出现了一个新错误,询问了另一个问题,该问题显示了更新方法的更多详细信息。

【讨论】:

    猜你喜欢
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多