首页 > 解决方案 > 如何在 POSTING 数据时将其保存给已登录的用户?(Asp 网络核心 API)

问题描述

我在 ASP NET CORE 中创建了一个 rest API,并传递了一个 JWT Bearer 令牌进行授权。

我的令牌包含一个NameIdentifier声明,即当前用户 ID。

MyApplicationUser与另一个名为Contact.

当我POST一个新的Contact时,我希望它被添加到列表中Contacts。我将如何巧妙地实现这一目标?我已经这样做了并且它有效,但我真的不知道这是否是实现这一目标的最佳方式。(不要担心那个用户 ID 字符串,它现在可以为空或 null。)

联系类别:

public class Contact
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string PhoneNumber { get; set; }
    public string Email { get; set; }
    public Address VisitingAddress { get; set; }
    [JsonIgnore]
    public ApplicationUser ApplicationUser { get; set; }
    [JsonIgnore]
    public string ApplicationUserId { get; set; }
}

这是我POST在我的方法ContactsController

如果我将ApplicationUserId登录用户的 userId分配给Contact类,Core EF 会自动确定它应该添加ApplicationUserContacts.

[HttpPost]
public async Task<IActionResult> Add(Contact contact)
{
    var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;
    contact.ApplicationUserId = userId;
    var result = await _repository.Add(contact);
    if (result == null) return BadRequest();
    return CreatedAtAction(nameof(Get), new { id = contact.Id }, contact);
}

这是我的GET方法。

一开始它会得到一个完整的列表,Contacts但我在返回之前将它们过滤掉。这是一个好方法还是有更简洁的方法来做到这一点?

[HttpGet]
public async Task<IActionResult> GetAll()
{
    var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;
    var result = await _repository.GetAll();
    if (!string.IsNullOrEmpty(userId))
    {
        result = result.Where(x => x.ApplicationUserId == userId).ToList();
    }

    return Ok(result);
}

标签: c#asp.net-coreentity-framework-coreasp.net-identityasp.net-core-webapi

解决方案


推荐阅读