2010-11-03 16 views
12

que estoy recibiendo el siguiente error mucho cuando el robot de Google viene por:lanzar automáticamente errores 404 cuando faltan parámetros para asp.net mvc

El diccionario de parámetros contiene una entrada nula para el parámetro 'id' tipo "System.Int32" no nulable para el método "System.Web.Mvc.ActionResult Show (Int32)" en "someclass". Un parámetro opcional debe ser un tipo de referencia, un tipo anulable o ser declarado como un parámetro opcional.
nombre Parámetro: Parámetros

Me preguntaba si sería posible tener la aplicación tiro de 404 en lugar de falta de parámetros excepción en este caso.

Gracias!

Actualización para aclarar lo que quiero es que todos los casos para este error en particular arrojen un error 404 en lugar de 500. Preferiblemente escribiendo un envoltorio de algún tipo que solo capte este error.

Respuesta

5

Lo que está buscando es route constraints.

+1

Esto significaría estaré escribiendo rutas personalizadas para una gran cantidad de acciones que tengo en mi solicitud ya que no puedo acaba de cambiar las rutas genéricas, aren' hay mejores formas de hacerlo? – TomHastjarjanto

6
public ActionResult Index(int? id) 
{ 
    if(!id.HasValue()) 
    { 
    throw new HttpException(404, "Are you sure you're in the right place?"); 
    } 
} 
+4

Esto funciona, pero tiene que poner este código en * cada * método de acción. ¿No hay una mejor manera de hacer esto centralmente? –

+0

@DrewNoakes Sí, eso es lo que estoy pensando también. La otra opción es hacer int id = 0 y establecerlo por defecto en 0 si no se transfiere nada, pero aún necesita hacer el control en cada acción que esto aplique también. –

1

No es un nuevo artículo, y no puedo prometer que no hay mejor manera de hacerlo en el reciente MVC construye, pero creo que esto es una muy buena posibilidad :)

creo Debería poder escribir un encuadernador de modelo personalizado, que verificará si la propiedad de ID está presente y es necesaria, y arrojará un error 404/se rehusará a enlazar si no está allí ... Sé que no es mucho, pero podría llevarlo de la manera correcta :)

PS Un aglutinante ejemplo modelo + cómo funciona puede ser encontrado aquí:
http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx

Cuestiones relacionadas