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

493
Visualizações
Errores de manejo de ASP.NET MVC 6 basados en el código de estado HTTP

Quiero mostrar diferentes mensajes de error para cada código de estado, por ejemplo:

  • 400 Petición Incorrecta
  • 403 Prohibido
  • Error interno de servidor 500
  • 404 No encontrado
  • 401 no autorizado

¿Cómo puedo lograr esto en las nuevas aplicaciones ASP.NET MVC 6? ¿Puedo hacer esto usando el método integrado UseErrorHandler?

 application.UseErrorHandler("/error");

Además, me di cuenta de que incluso con el controlador anterior, ingresar una URL inexistente, por ejemplo, /esta-página-no-existe, genera una fea página de error 404 No encontrado de IIS. ¿Cómo se puede manejar esto también?

En MVC 5, tuvimos que usar la sección system.web customerrors para ASP.NET y la sección system.webServer httpErrors en el archivo web.config, pero era difícil trabajar con un comportamiento difícil de manejar y muy extraño. ¿MVC 6 hace esto mucho más simple?

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

0

Podría usar el StatusCodePagesMiddleware para esto. El siguiente es un ejemplo:

 public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { app.UseStatusCodePagesWithReExecute("/StatusCodes/StatusCode{0}"); app.UseMvcWithDefaultRoute();

Controlador que maneja las solicitudes de código de estado:

 public class StatusCodesController : Controller { public IActionResult StatusCode404() { return View(viewName: "NotFound"); // you have a view called NotFound.cshtml } ... more actions here to handle other status codes }

Algunas notas:

  • Verifique otros métodos de extensión como UseStatusCodePagesWithRedirects y UseStatusCodePages para otras capacidades.
  • Intenté tener StatusCode como una cadena de consulta en mi ejemplo, pero parece que este middleware no maneja cadenas de consulta, pero puede echarle un vistazo a este código y solucionar este problema.
over 4 years ago · Santiago Trujillo Relatório

0

¿Cómo puedo lograr esto en las nuevas aplicaciones ASP.NET MVC 6? ¿Puedo hacer esto usando el método integrado UseErrorHandler?

Respuesta rápida: no de una manera elegante.

Explicación/Alternativa: para comenzar, veamos primero qué está haciendo realmente el método UseErrorHandler : https://github.com/aspnet/Diagnostics/blob/6dbbe831c493e6e7259de81f83a04d1654170137/src/Microsoft.AspNet.Diagnostics/ErrorHandlerExtensions.cs#L25 que agrega el siguiente middleware: https://github.com/aspnet/Diagnostics/blob/6dbbe831c493e6e7259de81f83a04d1654170137/src/Microsoft.AspNet.Diagnostics/ErrorHandlerMiddleware.cs Tenga en cuenta las líneas 29-78 (el método de invocación)

El método de invocación se ejecuta cada vez que ingresa una solicitud (controlada por la ubicación de su application.UseErrorHandler("...") en su Startup.cs ). Por lo tanto, UseErrorHandler es una forma gloriosa de agregar un middleware personalizado: middleware = componente que puede actuar en una solicitud http.

Ahora con ese trasfondo, si quisiéramos agregar nuestro propio middleware de error que diferenciara las solicitudes. Podríamos hacer esto agregando un middleware similar que es como el ErrorHandlerMiddleware predeterminado modificando estas líneas: https://github.com/aspnet/Diagnostics/blob/6dbbe831c493e6e7259de81f83a04d1654170137/src/Microsoft.AspNet.Diagnostics/ErrorHandlerMiddleware.cs#L48-L51 Con ese enfoque, podríamos controlar la ruta de redirección en función del código de estado.

En MVC 5, tuvimos que usar la sección system.web customerrors para ASP.NET y la sección system.webServer httpErrors en el archivo web.config, pero era difícil trabajar con un comportamiento difícil de manejar y muy extraño. ¿MVC 6 hace esto mucho más simple?

Respuesta: Seguro que sí :). Al igual que la respuesta anterior, la solución radica en agregar middleware. Hay un atajo para agregar middleware simple a través de IApplicationBuilder en su Startup.cs ; al final de su método Configure , puede agregar lo siguiente:

 app.Run(async (context) => { await context.Response.WriteAsync("Could not handle the request."); // Nothing else will run after this middleware. });

Esto funcionará porque significa que llegó al final de su canalización http sin que se manejara la solicitud (ya que está al final de su método Configure en Startup.cs ). Si desea agregar este middleware (de manera rápida) con la opción de ejecutar el middleware después de usted, así es como se hace:

 app.Use(async (context, next) => { await context.Response.WriteAsync("Could not handle the request."); // This ensures that any other middelware added after you runs. await next(); });

¡Espero que esto ayude!

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