Mehrere optionale Parameter web-api-Attribut-routing

Hallo Leute, ich bin neu auf-Attribut-routing-und nicht sicher, ob dies überhaupt möglich ist.

Was ich habe ist ein Attribut route, die funktioniert gut so, wie es

[HttpGet]
[Route("GetIssuesByFlag/{flag:int=3}")]
public IEnumerable<IssueDto> GetIssuesByFlag(int flag)

nun möchte ich aber hinzufügen, dass einige zusätzliche optionale Parameter eingrenzen meiner Suche, so möchte ich hinzufügen, dass 2 zusätzliche optionale Parameter.

was ich versucht habe:

[HttpGet]
[Route("GetIssuesByFlag/{flag:int=3?}/{categoryId:int?}/{tagIds?}")]
public IEnumerable<IssueDto> GetIssuesByFlag(int flag , int? categoryId = null, int?[] tagIds = null)

Dies funktioniert gut, wenn mein Ruf ist /api/controller/1/2
aber schlägt mit 404, wenn es um /api/controller/1

Wie kann ich das erreichen ?

Edit 1: Nkosi ' s Antwort Balg gearbeitet, jedoch eine zusätzliche änderung wurde notwendig.

[HttpGet]
[Route("GetIssuesByFlag/{flag:int=3}/{tagIds?}/{categoryId:int?}")]
public IEnumerable<IssueDto> GetIssuesByFlag(int flag , List<int> tagIds, int? categoryId = null )

Die Liste oder das array muss zweiter werden, da es automatisch null, wenn kein Wert angegeben ist und dürfen nicht als optional markiert mit = null

  • {flag:int=3?} ist das problem. es ist entweder optional {flag:int?} mit der default-Wert in der Aktion oder {flag:int=3}. Sie haben derzeit 3 optionale Parameter. wenn man nur den Wert 1 routing-Tabelle nicht wissen, welche optionalen parameter Sie sich beziehen, daher der 404
  • Nikosi ist die Antwort für mich gearbeitet! Auch der erste nicht, die Spaltung ein, dass Sie entfernt, alles funktioniert jetzt
  • erste(entfernen optional aus-flag) können Sie es aktualisieren auf die Antworten, damit kann ich daneben als richtig?
InformationsquelleAutor Harry | 2017-02-08
Schreibe einen Kommentar