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

时间:2018-09-04 20:54:37

标签: asp.net-core 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来获取请求的对象,以便将数据存储到数据库中

类似这样的东西

 [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; }
}

对不起,如果我不清楚

2 个答案:

答案 0 :(得分:1)

要通过requestId将Request保存到Conversation,不需要这样做,您可以定义导航属性。

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

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

答案 1 :(得分:0)

您似乎想将多个对话绑定到一个请求并将其保存在数据库中。

像这样编辑模型:

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);

    }

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