2015-10-27 16 views
9

Nach http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx#optionals-and-defaultsAttribut Routing - optionaler Parameter funktioniert nicht?

Sie können durch Hinzufügen eines Fragezeichens optionale Parameter haben (?), Wenn Routing-Attribut. Es funktioniert jedoch nicht für mich (ASP.NET Web API 5).

[Route("staff/{featureID?}")] 
    public List<string> GetStaff(int? featureID) { 
     List<string> staff = null;   
     return staff; 
    } 

Wenn ich staff/1 verwenden etc es funktioniert gut, wenn ich /staff verwenden erhalte ich die übliche:

"No HTTP-Ressource wurde gefunden, dass die Anforderungs-URI übereinstimmt ..."

"Es wurde keine Aktion auf dem Controller gefunden, die der Anfrage entspricht."

Fehle ich eine Referenz oder etwas? Oder es falsch machen?

Antwort

1

Wenn ich tun:

[Route("staff/{featureID=null}")]

statt

[Route("staff/{featureID?}")]

Es funktioniert.

Technisch dies beantwortet meine Frage nicht, aber es bringt mich zum arbeiten!

8

Ich lief auch in das gleiche Problem und löste es ein wenig anders. Es funktionierte jedoch immer noch nicht für mich, wie es in diesem Blogbeitrag beschrieben wurde. Anstatt den Standardparameterwert in der Routendefinition hinzuzufügen, habe ich ihn der Funktionsdefinition hinzugefügt.

Ich hatte dies zu tun für mein Beispiel richtig zu arbeiten, weil ich den String-Wert haben string anstelle eines int und das Hinzufügen der Standard in der Routendefinition von null meine Funktionsparameter verursachte "null" benutzte.

[Route("staff/{featureID?}")] 
public List<string> GetStaff(int? featureID = null) { 
    List<string> staff = null;   
    return staff; 
} 
+0

auf das Sehen, macht es durchaus Sinn als optionales Argument auf einem normalen Verfahren würde auf diese Weise, einen guten Einblick auf die „Null“ Teil getan werden, als auch –

4

Dies liegt daran, dass Sie immer einen Standardwert für einen optionalen Parameter festlegen müssen, selbst wenn der Standardwert null ist. Deshalb funktioniert das:

[Route("staff/{featureID=null}")] 
+6

Warum haben die ' ? ' Zeichenfunktionalität überhaupt? – Sal