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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
{flag:int=3?}
ist das problem. es ist entweder optional{flag:int?}
mit der default-Wert in der Aktion oder{flag:int=3}
.Sie derzeit haben 3 optionale Parameter. wenn man nur den Wert 1 routing-Tabelle nicht wissen, welche optionalen parameter Sie sich beziehen, daher der 404
Verwenden Sie eine query-string.
Url: /getissuesbyflag/1?tagIds=2,5,6&categoryId=56
Sollten Sie wirklich verwenden Sie query-strings für optionale Parameter und Pfad-Parameter, wenn Sie erforderlich sind.