jquery - 如果项目不存在但以任何方式返回项目的 ID,我如何只发布到 API?
问题描述
我正在向我的 API 发布一个时间表。如果用户选择接收通知,我想将他们的电子邮件存储在一个单独的表中(以规范化的名义!),以便当我排队作业时,我可以参考电子邮件的 ID。
我只想插入不存在的电子邮件,但将电子邮件的 ID 与日程表一起存储在表中。
解决这个问题的最佳方法是什么?我在想需要2个单独的电话吗?
我想我真正需要知道的是,我如何发布并返回电子邮件地址的现有 ID 或新 ID?
// POST /api/email
[HttpPost]
public IHttpActionResult AddToEmails(EmailDto emailDto)
{
if (!ModelState.IsValid)
return BadRequest();
var email = Mapper.Map<EmailDto, EMAILS>(emailDto);
_context.EMAILS.Add(email);
_context.SaveChanges();
emailDto.ID = email.ID;
return Created(new Uri(Request.RequestUri + "/" + email.ID), emailDto);
}
// POST /api/schedule
[HttpPost]
public IHttpActionResult AddToSchedule(ScheduleDto sequenceDto)
{
if (!ModelState.IsValid)
return BadRequest();
var sequence = Mapper.Map<ScheduleDto, SCHEDULE>(sequenceDto);
_context.SCHEDULE.Add(sequence);
_context.SaveChanges();
sequenceDto.ID = sequence.ID;
return Created(new Uri(Request.RequestUri + "/" + sequence.ID), sequenceDto);
}
编辑:
@Chris Mack,感谢您的指导。我最终对我的 API 调用进行了更改,它基本上做同样的事情:
// POST /api/email
[HttpPost]
public IHttpActionResult AddToEmails(EmailDto emailDto)
{
if (!ModelState.IsValid)
return BadRequest();
var email = Mapper.Map<EmailDto, EMAILS>(emailDto);
var emailCheck = _context.EMAILS.SingleOrDefault(
c => c.EMAIL.ToString().ToUpper() == emailDto.EMAIL.ToString().ToUpper()
&& c.TYPE == emailDto.TYPE
);
if (emailCheck == null)
{
_context.EMAILS.Add(email);
_context.SaveChanges();
emailDto.ID = email.ID;
} else
{
emailDto.ID = emailCheck.ID;
}
return Created(new Uri(Request.RequestUri + "/" + emailDto.ID), emailDto);
}
解决方案
INSERT
我将有一个存储过程,仅当项目不存在时才执行 SQL (使用IF
语句),然后返回/选择该项目的 ID(无论它以前是否存在)。然后,您可以在 POST 调用中将该 ID 作为返回值返回。
推荐阅读
- keras - 从具有多个列名的数据帧流入 y_col 生成类型错误
- django - Django 自动执行 collectstatic 命令
- algorithm - 树上的回文
- arrays - 将稀疏矩阵乘以数组而不复制
- arrays - 显示对象类型列表中的项目
- mysql - Sql - 如何获取最后 5 分钟的数据
- classification - 复制数据是解决偏见的有效方法吗?
- javascript - 如何在NodeJS中将任意长度的数字(BigInt或Int)表示为Buffer
- sql-server - SQL Server 2012:获取触发触发器的 SQL 代码,没有 DBCC INPUTBUFFER 或 sys.dm_exec_input_buffer
- spring-boot - 返回有关用户创建端点的 OAuth 令牌信息