Несколько необязательных параметров веб-API-атрибута маршрутизации

Привет, ребята, я новичок в атрибуте маршрутизации и не уверен, что это вообще возможно.

То, что у меня есть, это маршрут атрибута, который отлично работает, как это

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

однако теперь я хочу добавить несколько дополнительных параметров, чтобы сузить область поиска, поэтому я хочу добавить 2 дополнительных параметра.

что я пробовал:

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

Это работает нормально, если мой звонок /api/controller/1/2но терпит неудачу с 404, когда дело доходит до /api/controller/1

Как я могу достичь этого?

Правка 1: ответ Нкоси сработал, однако потребовалась дополнительная модификация.

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

Список или массив должен быть вторым, так как он автоматически равен нулю, если значение не указано, и не может быть помечен как необязательный с помощью = null

2 ответа

Решение

{flag:int=3?} это проблема. это либо необязательно {flag:int?} со значением по умолчанию в действии или {flag:int=3},

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

В настоящее время у вас есть 3 дополнительных параметра. когда у вас есть только таблица маршрутизации с 1 значением, вы не будете знать, на какой необязательный параметр вы ссылаетесь, следовательно, 404

Используйте строку запроса.

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

URL: /getissuesbyflag/1? TagIds=2,5,6&categoryId=56

Вы действительно должны использовать строки запроса для необязательных параметров и параметров пути, если они требуются.

Другие вопросы по тегам