Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

2.7K
Views
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 answers
Answer question

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 Report

0

Solo devuelve lo siguiente:

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

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!