Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

2.7K
Vistas
ASP.NET Web API: forma correcta de devolver una respuesta 401/no autorizada

Tengo un sitio webapi de MVC que usa la autenticación OAuth/token para autenticar las solicitudes. Todos los controladores relevantes tienen los atributos correctos y la autenticación funciona correctamente.

El problema es que no todas las solicitudes se pueden autorizar en el ámbito de un atributo; se deben realizar algunas comprobaciones de autorización en el código al que llaman los métodos del controlador. ¿Cuál es la forma correcta de devolver una respuesta 401 no autorizada en este caso?

He intentado throw new HttpException(401, "Unauthorized access"); , pero cuando hago esto, el código de estado de respuesta es 500 y también obtengo un seguimiento de la pila. Incluso en nuestro DelegatingHandler de registro podemos ver que la respuesta es 500, no 401.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Debería lanzar unaHttpResponseException desde su método API, no HttpException :

 throw new HttpResponseException(HttpStatusCode.Unauthorized);

O, si desea proporcionar un mensaje personalizado:

 var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Oops!!!" }; throw new HttpResponseException(msg);
over 4 years ago · Santiago Trujillo Denunciar

0

Solo devuelve lo siguiente:

 return Unauthorized();
over 4 years ago · Santiago Trujillo Denunciar

0

Como alternativa a las otras respuestas, también puede usar este código si desea devolver un IActionResult dentro de un controlador ASP.NET.

ASP.NET

 return Content(HttpStatusCode.Unauthorized, "My error message");

Actualización: ASP.NET Core

El código anterior no funciona en ASP.NET Core, puede usar uno de estos en su lugar:

 return StatusCode((int)System.Net.HttpStatusCode.Unauthorized, "My error message"); return StatusCode(Microsoft.AspNetCore.Http.StatusCodes.Status401Unauthorized, "My error message"); return StatusCode(401, "My error message");

Aparentemente, la frase de motivo es bastante opcional ( ¿Puede una respuesta HTTP omitir la frase de motivo? )

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda