Tengo una acción que se lleva en una cadena que se utiliza para recuperar algunos datos. Si esta cadena de resultados en la ausencia de datos devueltos (tal vez porque ha sido eliminada), quiero devolver un mensaje de error 404 y mostrar una página de error.

Yo actualmente uso devolver una vista especial que mostrar un mensaje de error descriptivo específico para esta acción diciendo que no se encontró el elemento. Esto funciona bien, pero sería ideal como para devolver un código de estado 404 para motores de búsqueda saben que este contenido ya no existe, y puede eliminar de los resultados de búsqueda.

¿Cuál es la mejor manera de ir sobre esto?

Es tan simple como Respuesta.StatusCode = 404?

  • también tienes que tener la Respuesta.TrySkipIisCustomErrors = true; La respuesta por @gansos brillantes era un protector de la vida…
InformationsquelleAutor Paul Hiles | 2010-06-01

12 Comentarios

  1. 102

    Hay varias formas de hacerlo,

    1. Tienes razón en común código aspx puede ser asignado en su forma específica
    2. throw new HttpException(404, "Some description");
    • Una cosa a tener en cuenta es que si usted tiene un customError página creada para manejar 404, a continuación, esta página de error devolverá 200 (no se encuentra la página fue encontrado… 🙁 ). Tiendo a tirar la excepción de decir BlogController y tienen la NotFound acción de establecer la adecuada código de respuesta.
    • Yo terminé haciendo: Respuesta.StatusCode = 404; La Respuesta.TrySkipIisCustomErrors = true; return View(«MyCustomView»); Esto funciona perfectamente en mi situación.
    • Esta es la respuesta para mí en MVC3. Ojalá pudiera upvote como una respuesta en lugar de un comentario.
    • Esto no funciona, creo que, si el uso de IIS. En mi sitio de prueba funciona bien, pero en el sitio en vivo la página de error personalizada de patadas en el.
    • funciona para IIS, así como para IIS Express, usted necesita revisar su configuración de IIS (consola de Administración)
  2. 144

    En ASP.NET MVC 3 y por encima de usted puede devolver un HttpNotFoundResult desde el controlador.

    return new HttpNotFoundResult("optional description");
    • uso: return new HttpNotFoundResult("optional description");
    • Si se devuelve dentro de la controladora también hay una conveniencia método llamado HttpNotFound(). Así que usted podría volver return HttpNotFound("optional description") lugar.
    • Cosas wren no es conveniente volver en 2012 😉
  3. 58

    En MVC 4 y por encima de usted puede utilizar el built-in HttpNotFound métodos auxiliares:

    if (notWhatIExpected)
    {
        return HttpNotFound();
    }

    o

    if (notWhatIExpected)
    {
        return HttpNotFound("I did not find message goes here");
    }
  4. 24

    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>
    • También, todos los disponibles los códigos de estado que existen en esta enumeración: HttpStatusCode.
  5. 12

    He usado este:

    Response.StatusCode = 404;
    return null;
    • Gracias. Esto se ve mucho mejor que lanzar un costoso excepción en el servidor. Pregunto si el 404 sería registran en los registros de IIS… lo ideal sería.
    • Pero, en asp.net este método no es una buena solución, ¿verdad? desde la página web de visualización de todos los relacionados con la información sensible del servidor.
    • Una excepción en menos de una milésima de segundo para manejar. En comparación con los pocos cientos de millseconds para hacer una conexión HTTP arriba y atrás no tiene sentido. tirar HttpException o retorno HttpNotFoundResult, establecer manualmente el código de estado y devolver null es terrible.
  6. 5

    En NerdDinner por ejemplo. Trate de es

    public ActionResult Details(int? id) {
        if (id == null) {
            return new FileNotFoundResult { Message = "No Dinner found due to invalid dinner id" };
        }
        ...
    }
    • Gracias, pero detrás de las escenas, que produce una HttpException similar a la sugerencia número dos en Dewfy del post. Estoy buscando un poco más de control para que yo pueda mostrar una buena página de error específico a la acción, no sólo a redirigir a la controladora / global página de error 404. Parece como si ajuste el código de estado y de volver a una vista personalizada es el camino a seguir para mi situación.
  7. 4

    Ninguno de los ejemplos anteriores se trabajó para mí hasta que he añadido la línea media por debajo de:

    public ActionResult FourOhFour()
    {
        Response.StatusCode = 404;
        Response.TrySkipIisCustomErrors = true; //this line made it work
        return View();
    }
    • Está usted en serio que me diga que el simple return HttpNotFound(); no trabajo para usted? ¿Qué edad tiene su sistema?
    • .NET 4.5, MVC 4
    • Intenta return HttpNotFound();? Funciona muy bien con MVC 4 hacia arriba. msdn.microsoft.com/en-us/library/… «El TrySkipIisCustomErrors propiedad se utiliza sólo cuando la aplicación está alojado en IIS 7.0. Cuando se ejecuta en el modo Clásico en IIS 7.0, la TrySkipIisCustomErrors de la propiedad valor predeterminado es true. Cuando se ejecuta en modo Integrado, el TrySkipIisCustomErrors de la propiedad valor predeterminado es falso.»
  8. -1

    Por favor intente la demostración siguiente código:

    public ActionResult Test()
    
    {
      return new HttpStatusCodeResult (404,"Not found");
    }

Dejar respuesta

Please enter your comment!
Please enter your name here