3

Привет, ребята, я новичок в атрибуции маршрутизации и не уверен, что это возможно.Несколько необязательных параметров маршрутизация атрибутов api 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

+1

'{flag: int = 3?}'. это либо необязательный '{flag: int?}' со значением по умолчанию в действии, либо '{flag: int = 3}'. В настоящее время у вас есть 3 необязательных параметра. когда у вас есть только таблица маршрутизации с 1 значением, не знаете, какой дополнительный параметр вы имеете в виду, поэтому ответ 404 – Nkosi

+0

от Nikosi работал для меня! Ну, первый, а не раскалывающий, удалив все, теперь все работает нормально – Harry

+0

первый (удалить необязательно из флага), можете ли вы обновить его на ответы, чтобы я мог отметить как правильно? – Harry

ответ

1

{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

0

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

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

Адрес:/getissuesbyflag/1 tagIds = 2,5,6 & CategoryId = 56

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

+0

Он работает снова, если я предоставляю все переменные, но если я предоставляю только флаг, который он терпит неудачу с «сообщением»: «HTTP-ресурс не найден, который соответствует URI запроса» https: // localhost: 44363/api/Issues/GetIssuesByFlag/1 '. ", " messageDetail ":" На контроллере не обнаружено никаких действий, которые соответствуют запросу. " – Harry