Как отредактировать тело HTTP POST-запроса в ядре .net? - PullRequest
0 голосов
/ 04 сентября 2018

Мне нужно отредактировать данные (тело) HTTP-запроса POST перед сохранением его в БД.

Я новичок и пытаюсь сохранить данные в базе данных, но перед сохранением мне нужно получить данные, используя значение одной переменной в полученном запросе

Дополнительная информация: это может помочь

Это http post body

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

здесь запрос является объектом, а этот "9cb311 ...... f5f906" является идентификатором запроса. Я хочу получить объект запроса, используя этот идентификатор запроса, чтобы я мог сохранить данные в БД

что-то вроде этого

 [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 голосов
/ 05 сентября 2018

Похоже, вы хотите связать несколько разговоров с одним запросом и сохранить их в базе данных.

Отредактируйте вашу модель так:

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

    }

Это сохранит разговор в вашей базе данных, а также свяжет его с этим запросом.

0 голосов
/ 05 сентября 2018

Чтобы сохранить Request в Conversation по requestId, нет необходимости делать это, вы можете определить свойство навигации.

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

Затем вы можете сохранить текущий запрос напрямую с помощью RequestId, не извлекая объект Request из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...