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.

Cómo gestionar múltiples acciones en la misma ruta al intentar acceder a HttpDelete

Tengo un problema con la gestión de múltiples acciones en la misma ruta al intentar acceder al método del controlador HttpDelete.

[Route("api/doctors/{id}/{type}")]
[HttpDelete]
public async Task<ihttpactionresult> Toggle(int id, string type)
{
    switch (type)
    {
        case "delete":
            return Ok(await Delete(id));
        case "disable":
            return Ok(await Disable(id));
        case "block":
            return Ok(await Block(id));
        default:
            return NotFound();
    }
}

De esta manera, estoy usando verbos en la ruta, pero me gustaría evitarlos.
¿Alguien puede decirme una mejor manera de gestionarlos?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Un enfoque para gestionar múltiples acciones en la misma ruta sin utilizar verbos en la ruta es crear métodos separados en el controlador para cada acción y utilizar el atributo HttpDelete en cada método. Luego, en el método, puedes verificar el parámetro de tipo y llamar a la acción correspondiente.

    Por ejemplo:

    [Route("api/doctors/{id}")]
    public class DoctorsController : ApiController
    {
        [HttpDelete]
        public async Task<ihttpactionresult> Delete(int id)
        {
            // lógica de eliminación
        }
    
        [HttpDelete]
        public async Task<ihttpactionresult> Disable(int id)
        {
            // lógica de desactivación
        }
    
        [HttpDelete]
        public async Task<ihttpactionresult> Block(int id)
        {
            // lógica de bloqueo
        }
    
        [HttpDelete]
        public async Task<ihttpactionresult> Toggle(int id, string type)
        {
            switch (type)
            {
                case "delete":
                    return Ok(await Delete(id));
                case "disable":
                    return Ok(await Disable(id));
                case "block":
                    return Ok(await Block(id));
                default:
                    return NotFound();
            }
        }
    }
    

    Con este enfoque, puedes acceder a cada acción utilizando la misma ruta, pero los métodos del controlador están separados para mayor claridad y facilidad de mantenimiento.

Comments are closed.