Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

267
Visualizações
Versionado de API sin código duplicado en C#

Tengo una situación en la que agrego el control de versiones a una API, por lo que cambian las rutas a algunas funciones de la API. También cambié algunos métodos de POST a GET porque tenía más sentido.

Me gustaría desaprobar las rutas antiguas para que la gente empiece a usar las nuevas. Quiero que las rutas antiguas estén vinculadas a la v1 de mi API y las nuevas a la v2. Conseguí que esto funcionara duplicando todas las funciones y etiquetándolas con la ruta, el método y la versión de API correctos, pero esperaba una solución más limpia.

Mi ejemplo de 'limpiador' a continuación obviamente no funciona, ya que obtienes 4 funciones en este caso, todas obsoletas.

Usted obtiene:

  1. HTTPGET /canales
  2. HTTPPOST /canales
  3. HTTPGET /api/v2/canales/get
  4. HTTPPOST /api/v2/canales/get
 /// <summary> /// Gets a list of all channels /// </summary> /// <returns>List of all channels</returns> [HttpPost, Route("~/channels"), ApiVersion("1.0"), Obsolete("Obsolete, please use /api/v2/channels/get")] [HttpGet, Route("Get"), ApiVersion("2.0")] public async Task<ActionResult<IEnumerable<DbChannel>>> GetChannels() { return await _context.Monitors.ToListAsync(); }

¿Hay alguna manera de que pueda hacer que esto funcione?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Podría hacer dos funciones separadas que actúen como "puntos de acceso" a la lógica interna de la API. Uno de ellos podría marcarse como Obsoleto y usar las rutas antiguas y el otro usaría las rutas nuevas. Luego, podría crear una tercera función que contenga la lógica real de su API.

 // The obsolete access point [HttpPost, Obsolete("Obsolete, please use /api/v2/channels/get"), ApiVersion("1.0")] public async Task<ActionResult<IEnumerable<DbChannel>>> GetChannelsOld() { return await GetChannelsLogic(); } // The new access point [HttpGet, ApiVersion("2.0")] public async Task<ActionResult<IEnumerable<DbChannel>>> GetChannelsNew() { return await GetChannelsLogic(); } //Marked as NonAction so the method can't be accessed by a request. This is not necessary depending on the setup of your project. [NonAction] public async Task<ActionResult<IEnumerable<DbChannel>>> GetChannelsLogic() { // Perform some other logic return await _context.Monitors.ToListAsync(); }
over 4 years ago · Santiago Trujillo Relatório

0

Tratar de usar

 [HttpPost("~/channels"), ApiVersion("1.0"), Obsolete("Obsolete, please use /api/v2/channels/get")] [HttpGet("Get"), ApiVersion("2.0")] public async Task<ActionResult<IEnumerable<string>>> GetChannels() { return new List<string>(); }

para que solo puedas tener dos rutas

  1. HTTPPOST /canales
  2. HTTPGET /api/v2/canales/get
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda