12 Stimmen

Automatischer 404-Fehler bei fehlenden Parametern für asp.net mvc

Ich erhalte häufig die folgende Fehlermeldung, wenn der Google-Bot vorbeikommt:

Das Parameterwörterbuch enthält einen Nulleintrag für den Parameter 'id' vom nicht-nullbaren Typ 'System.Int32' für die Methode 'System.Web.Mvc.ActionResult Show(Int32)' in 'someclass'. Ein optionaler Parameter muss ein Referenztyp oder ein löschbarer Typ sein oder als optionaler Parameter deklariert werden.
Name des Parameters: Parameter

Ich habe mich gefragt, ob es möglich wäre, die Anwendung 404 anstelle von fehlenden Parameter Ausnahme in diesem Fall werfen zu lassen.

Danke!

Update zu klären, was ich will, ist, dass alle Fälle für diesen bestimmten Fehler einen 404-Fehler anstelle eines 500 werfen. Vorzugsweise durch das Schreiben eines Wrapper einer Art, die nur diesen Fehler fängt.

8voto

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

5voto

Wyatt Barnett Punkte 15500

Was Sie suchen, ist Streckenbeschränkungen .

1voto

Artiom Chilaru Punkte 11327

Es ist kein neuer Artikel, und ich kann nicht versprechen, dass es keine bessere Möglichkeit gibt, es in den aktuellen MVC-Builds zu tun, aber ich denke, dies ist eine ziemlich gute Möglichkeit :)

Ich glaube, Sie sollten in der Lage sein, ein benutzerdefiniertes Modell Binder zu schreiben, die prüfen, ob die ID-Eigenschaft vorhanden ist und erforderlich ist, und werfen einen 404-Fehler / verweigern zu binden, wenn es nicht da ist. Ich weiß, es ist nicht viel, aber es könnte Sie auf den richtigen Weg führen :)

P.S. Ein Beispiel für einen Modellordner und wie er funktioniert, finden Sie hier:
http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X