2010-10-14 11 views
19

Estoy tratando de hacer una solicitud para un cliente y si el cliente no existe debe devolver algún tipo de página "No encontrado". ¿Cuál de las siguientes sería la mejor práctica para usar para tal tarea, y por qué?ASP.NET MVC - HttpException o return view?

public ActionResult Index(int id) 
{ 
    if (customerService.GetCustomerById(id) == null) 
     return View("NotFound"); 

    return View(); 
} 

o

public ActionResult Index(int id) 
{ 
    if (customerService.GetCustomerById(id) == null) 
     throw new HttpException(404, "Customer not found"); 

    return View(); 
} 
+0

¿Cuál sería la excepción significar para el usuario final? Además, ¿por qué está emitiendo enlaces a ID de clientes no existentes? :) – bzlm

+0

Debería decirle al usuario final que existe el usuario dosent. La respuesta a su segunda pregunta es que si alguien elimina a un cliente y otro no ha actualizado aún su navegador, entonces el enlace aún aparece en la lista y cuando se hace clic arrojaría una excepción inesperada. – ebb

+0

Sólo para retroceder, ¿qué pasa si un humano ingresa una identificación incorrecta a mano? 404. –

Respuesta

6

Lanza un 404. Realmente no hay argumento. No se trata de ser un discípulo de REST, sino de cómo funciona la web.

Puede devolver una vista y un 404. A menudo es útil para ayudar al usuario o presentar un cuadro de búsqueda o punto a algunos artículos más vendidos, pero hacer que el NotFound claro para el cliente y siempre devolverá un 404 en el Respuesta HTTP Sin dudas sobre eso.

Editar: Esta es una buena orientación: http://www.codinghorror.com/blog/2007/03/creating-user-friendly-404-pages.html

2

Esta es una buena pregunta (1), ya que hay algunas opiniones diferentes por ahí acerca de cuándo utilizar códigos de excepción HTTP y cuándo no.

Los discípulos de REST probablemente te dirán que vayas por la ruta de Excepción HTTP porque creen que un URI identifica un recurso conceptual (es decir: el objeto/cosa real al que te refieres - un Cliente en este caso), y si eso el recurso no existe, entonces debería obtener un error 404 de vuelta.

Sin embargo, algunos estarán en desacuerdo y afirman que solo debe devolver un error 404 si el recurso físico, p. Ej. un archivo, no existe.

Tiendo a caer en el segundo campo y le recomendaría que devuelva 200 OK con una vista personalizada que indique que el cliente especificado por el ID no se pudo encontrar.

+0

Una vista personalizada que toma un parámetro para un mensaje de error y un código de respuesta como 200 sería el camino a seguir. – ebb

+0

Esa sería mi recomendación, sí. Como dije, es solo una opinión y no necesariamente una mejor práctica codificada, así que realmente puedes hacer lo que quieras. –

+3

¿No sería un poco más seguro por razones de SEO arrojar el 404? – David