Tengo una acción que toma una cadena que se usa para recuperar algunos datos. Si esta cadena no devuelve datos (tal vez porque se ha eliminado), quiero devolver un 404 y mostrar una página de error.
Actualmente solo uso devolver una vista especial que muestra un mensaje de error descriptivo específico de esta acción que dice que no se encontró el elemento. Esto funciona bien, pero idealmente le gustaría devolver un código de estado 404 para que los motores de búsqueda sepan que este contenido ya no existe y pueden eliminarlo de los resultados de búsqueda.
¿Cuál es la mejor manera de hacer esto?
¿Es tan simple como configurar Response.StatusCode = 404?
asp.net-mvc
error-handling
http-status-code-404
Paul Hiles
fuente
fuente
Respuestas:
Hay múltiples formas de hacerlo,
throw new HttpException(404, "Some description");
fuente
En ASP.NET MVC 3 y superior, puede devolver un HttpNotFoundResult desde el controlador.
fuente
return new HttpNotFoundResult("optional description");
HttpNotFound()
. Para que puedas volverreturn HttpNotFound("optional description")
en su lugar.En MVC 4 y superior puedes usar los
HttpNotFound
métodos de ayuda incorporados :o
fuente
Código:
Web.config
fuente
He usado esto:
fuente
Si está trabajando con .NET Core, puede
return NotFound()
fuente
En NerdDinner, por ejemplo. Intenta que
fuente
Ninguno de los ejemplos anteriores funcionó para mí hasta que agregué la línea media a continuación:
fuente
return HttpNotFound();
no funcionó para ti? ¿Cuántos años tiene su sistema?return HttpNotFound();
? Funciona bien con MVC 4 hacia arriba. msdn.microsoft.com/en-us/library/… "La propiedad TrySkipIisCustomErrors se usa solo cuando su aplicación está alojada en IIS 7.0. Cuando se ejecuta en modo clásico en IIS 7.0, el valor predeterminado de la propiedad TrySkipIisCustomErrors es verdadero. Cuando se ejecuta en modo integrado , el valor predeterminado de la propiedad TrySkipIisCustomErrors es falso ".Yo suelo:
Esto funciona para mí :-)
fuente
En .NET Core 1.1:
fuente
También puedes hacer:
fuente
Por favor, intente el siguiente código de demostración:
fuente