es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Realizar una petición POST a dos APIs en un solo Controlador

Estoy haciendo esta pregunta de nuevo porque mi pregunta original no obtuvo respuesta, así que voy a tratar de simplificarla.

Tengo un controlador y dos soluciones diferentes, cada una con un modelo.

En uno de los controladores (OrdersController) quiero enviar datos que se envían a otro modelo llamado Basket. Quiero enviar lo siguiente a OrdersController:

{
  "identifier": "string"
}

que también quiero enviar a mi modelo Basket en la siguiente URL:

https://localhost:5500/api/Basket/{identifier}

Aquí está mi controlador en OrderControllers:

[HttpPost]
public async Task<><orderdto>> PostOrderDTO(OrderDTO orderDTO)
{
    // TODO Contactar con BasketService (GET /api/Baskets/{identifier} y extraer 'identifier' y enviarlo a BasketService

    // Generar el pedido (Order, OrderLine)

    _context.OrderDTO.Add(orderDTO);
    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateException)
    {
        if (OrderDTOExists(orderDTO.Identifier))
        {
            return Conflict();
        }
        else
        {
            throw;
        }
    }

    return CreatedAtAction("GetOrderDTO", new { id = orderDTO.Identifier }, orderDTO);
}

¿Cómo puedo hacer esto?

Gracias de antemano.

Pregunta original:
https://stackoverflow.com/questions/70533952/passing-string-from-database-to-another-database-in-net-microservices

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para enviar datos al modelo de la Cesta, puedes utilizar la clase HttpClient en C# y hacer una solicitud POST a la URL con el identificador en el parámetro de ruta. Aquí te mostramos cómo puedes modificar el controlador de Órdenes para lograr esto:

    [HttpPost]
    public async Task<><orderdto>> PostOrderDTO(OrderDTO orderDTO)
    {
        // Contactar con BasketService (GET /api/Baskets/{identifier} y extraer 'identifier' para enviarlo a BasketService
    
        // Hacer una solicitud POST a la API de Cestas con el identificador en el parámetro de ruta
        using (var client = new HttpClient())
        {
            var url = $"https://localhost:5500/api/Basket/{orderDTO.Identifier}";
            var data = new StringContent("", Encoding.UTF8, "application/json");
            var response = await client.PostAsync(url, data);
    
            if (!response.IsSuccessStatusCode)
            {
                return StatusCode((int)response.StatusCode);
            }
        }
    
        // Generar Orden (Order, OrderLine)
    
        _context.OrderDTO.Add(orderDTO);
        try
        {
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateException)
        {
            if (OrderDTOExists(orderDTO.Identifier))
            {
                return Conflict();
            }
            else
            {
                throw;
            }
        }
    
        return CreatedAtAction("GetOrderDTO", new { id = orderDTO.Identifier }, orderDTO);
    }
    

    En este código, HttpClient se utiliza para hacer una solicitud POST a la API de Cestas con el identificador en el parámetro de la URL. Se verifica el código de estado de la respuesta y, si no es exitoso, se devuelve un código de estado al cliente. Por último, el OrderDTO se guarda en la base de datos y se devuelve al cliente.

    Ten en cuenta que debes agregar una referencia a System.Net.Http en tu proyecto para que esto funcione.

Comments are closed.