c# - 如何在 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 会自动确定它应该添加ApplicationUser
到Contacts
.
[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);
}
解决方案
推荐阅读
- azure - 无法将 Web 包部署到应用服务
- android - Flutter tflite 插件未在应用程序的发布版本中进行识别
- python - 在 ubuntu docker 容器中使用 python pyttsx3 模块时出现 aplay 音频打开错误
- amazon-web-services - 如何在 CloudFormation 模板中引用尚未创建的 SQS 队列
- sql - 创建一个函数来显示雇用日期
- c# - C# 根据列数更改字体大小
- c# - 使用特定时区而不是托管服务器 timeone
- java - 运算符 '!=' 不能应用于 java
- android-studio - android studio 设备连接问题
- python-3.x - 绘制具有不等长度 x 和 y 轴的曲面图