【问题标题】:Calling ASP.net core web api end point that receive composed object from body调用从正文接收组合对象的 ASP.net 核心 Web api 端点
【发布时间】:2016-08-30 08:22:30
【问题描述】:

我的 asp.net web api 上有以下端点,用于发布新用户并从正文接收用户对象。

// POST: api/Users
[HttpPost]
public async Task<IActionResult> PostUser([FromBody] User user)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    user.DateCreated = DateTime.Now;
    //user.LastLogin = DateTime.Now;
    var hashedPassword = BCrypt.Net.BCrypt.HashPassword(user.Password);
    user.Password = hashedPassword;
    _context.User.Add(user);
    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateException ex)
    {
        if (UserExists(user.Id))
        {
            return new StatusCodeResult(StatusCodes.Status409Conflict);
        }
        else
        {
            Console.WriteLine(ex.Message);
        }
    }

    return CreatedAtAction("GetUser", new { id = user.Id }, user);
}

user 的一个属性是由以下类定义的 Role 对象:

public class Role
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime? LastUpdate { get; set; }
}

public class User
{
    public int Id { get; set; }
    public Role role { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string EmailAddress { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public DateTime? DateCreated { get; set; }
    public DateTime? LastLogin { get; set; }
}

问题是:如何使用 post 端点创建新用户?如何将角色传递给用户对象?请注意,我可以创建在角色属性上传递 null 的新用户。现在我想传递一个现有的角色。

这是我通过 Postman 和 angular2 应用程序传递的内容,但没有通过。返回 201 状态但不保存...

{
    "role": {
        "id": 1,
        "name": "Admin",
        "description": "Admin",
        "dateCreated": "2016-01-01T00:00:00",
        "lastUpdate": null
    },
    "firstName": "gggg",
    "lastName": "gggg",
    "emailAddress": "gggg",
    "userName": "ggg",
    "password": "$2a$10$z5dKRLqrus7i0fIluMynluJ8EOI2ko5vNGjBrBbfRaP738zHmc866",
    "dateCreated": "2016-08-16T21:24:18.144517+02:00",
    "lastLogin": null
}

【问题讨论】:

  • 您要分配给用户哪个角色?那是来自客户端吗?如何 ?你怎么称呼这个端点?
  • 从我的 angular2 应用程序中,我可以使用两种方式数据绑定从表单中对值进行字符串化,并获取值 {"FirstName":"gggg","LastName":"gggg","EmailAddress": "gggg","用户名":"ggg","密码":"ggg","角色":{"id":1,"name":"Admin","description":"Admin","dateCreated" :"2016-01-01T00:00:00","lastUpdate":null}}。但是 api 不接受这个对象
  • 当我传递没有 Role 属性的对象时,它可以工作。当我包含角色时,我做错了什么?

标签: asp.net-web-api


【解决方案1】:

我已经解决了这个问题。我通过正文传递的数据是正确的(模型状态是有效的),但是有一个内部错误导致我的实体框架核心。尽管该角色已经存在,但它正在尝试重新创建附加到该用户的角色。

【讨论】:

    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多