asp.net-mvc - practicas - roles asp net mvc
Cómo obtener acción MVC para devolver 404 (12)
En .NET Core 1.1:
return new NotFoundObjectResult(null);
Tengo una acción que toma una cadena que se utiliza para recuperar algunos datos. Si esta cadena da como resultado que no se devuelvan datos (tal vez porque se ha eliminado), quiero devolver un 404 y mostrar una página de error.
Actualmente solo uso return a special view que muestra un mensaje de error amigable específico para esta acción que dice que el ítem no fue encontrado. Esto funciona bien, pero lo ideal serí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 hacerlo?
¿Es tan simple como establecer Response.StatusCode = 404?
En ASP.NET MVC 3 y superior, puede devolver un HttpNotFoundResult desde el controlador.
return new HttpNotFoundResult("optional description");
En MVC 4 y superior, puede usar los métodos de ayuda HttpNotFound
:
if (notWhatIExpected)
{
return HttpNotFound();
}
o
if (notWhatIExpected)
{
return HttpNotFound("I did not find message goes here");
}
En NerdDinner, por ejemplo. Pruébalo
public ActionResult Details(int? id) {
if (id == null) {
return new FileNotFoundResult { Message = "No Dinner found due to invalid dinner id" };
}
...
}
Hay múltiples formas de hacerlo,
- Tiene razón en el código aspx común que puede asignarse de la manera especificada
throw new HttpException(404, "Some description");
He usado esto:
Response.StatusCode = 404;
return null;
Ninguno de los ejemplos anteriores funcionó para mí hasta que agregué la línea media a continuación:
public ActionResult FourOhFour()
{
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true; // this line made it work
return View();
}
Pruebe el siguiente código de demostración:
public ActionResult Test()
{
return new HttpStatusCodeResult (404,"Not found");
}
Si está trabajando con .NET Core, puede return NotFound()
También puedes hacer:
if (response.Data.IsPresent == false)
{
return StatusCode(HttpStatusCode.NoContent);
}
Yo suelo:
Response.Status = "404 NotFound";
Esto funciona para mí :-)
Código:
if (id == null)
{
throw new HttpException(404, "Your error message");//RedirectTo NoFoundPage
}
Web.config
<customErrors mode="On">
<error statusCode="404" redirect="/Home/NotFound" />
</customErrors>