如何在.net核心中编辑HTTP POST请求的正文?



我需要在将HTTP POST请求的数据(正文(存储到数据库之前对其进行编辑。

我是初学者,正在尝试将数据保存到数据库中,但在保存之前,我需要使用收到的请求中一个变量的值来获取数据

额外信息 : 这可能会有所帮助

这是 http 帖子正文

{
"message": "K E ?",
"senderId": "c24617c6-4680-4a8b-a010-cdf969ddd3f8",
"dateTime": "2018-09-01T20:06:06",
"request": "9cb31157-86b4-4eeb-b770-fc3a86f5f906"
}

这里的请求是对象和这个"9cb311......f5f906"是请求 ID,我想做的是使用此请求 ID 获取请求对象,以便我可以将数据存储到 DB 中

像这样的东西

[HttpPost]
public async Task<IActionResult> PostConversation([FromBody] Conversation conversation)
{
Request str = conversation.Request;
var request = (from  r in _context.Requests 
where r == str
select r);
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_context.Conversation.Add(conversation);
await _context.SaveChangesAsync();
return CreatedAtAction("GetConversation", new { id = conversation.ConversationUniqueId }, conversation);
}

数据库模型

public class Conversation
{
public Request Request { get; set; }
}
public class Request
{
public string RequestId { get; set; }
}

对不起,如果我不清楚

要通过requestId保存RequestConversation,没有必要这样做,您可以定义导航属性。

public class Conversation
{
public string RequestId { get; set; }
public virtual Request Request { get; set; }
}
public class Request
{
public string Id { get; set; }
}

然后,您可以使用RequestId直接保存当前请求,而无需从数据库中检索Request对象。

似乎您希望将多个对话绑定到一个请求并将它们保存在数据库中。

像这样编辑模型:

public class Conversation
{
public int ConversationId { get; set; }
public string RequestId { get; set; }
[ForeignKey(nameof(RequestId))]
public Request Request { get; set; }
}
public class Request
{
public string RequestId { get; set; }
[InverseProperty(nameof(Conversation.Request))]
public IEnumerable<Conversation> Conversations{ get; set; }
}

这将使 EF 了解你想要做什么。

并在操作中修改代码,例如:

[HttpPost]
public async Task<IActionResult> PostConversation([FromBody] Conversation conversation)
{
string requestId = conversation.RequestId;
var request = (from r in _context.Requests
where r.RequestId == requestId
select r);
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// Reject if given requestid can not find a request.
if (request == null)
{
return NotFound();
}
_context.Conversation.Add(conversation);
await _context.SaveChangesAsync();
return CreatedAtAction("GetConversation", new { id = conversation.ConversationUniqueId }, conversation);
}

这会将对话保存在数据库中,并将其链接到该请求。

最新更新