2016-08-31 2 views
0

я использую следующий код в asp coreAtribute маршрутизации с пустыми параметрами

[HttpGet] 
    [Route("all/{q:alpha}/{begin:int}/{pageSize:int}/{sortBy:alpha}/{sortOrder:alpha}")] 
    public IActionResult GetAll(string q, int begin, int pageSize, string sortBy, bool sortOrder) 
    { 
     return Json(_repository.GetItemsByPage(q, begin, pageSize, sortBy, sortOrder)); 
    } 

Это должно быть возможно, что «д» пусто. Без маршрутизации атрибутов все работает нормально. Следующий запрос работает:

http://localhost/api/all/?q=&begin=1&pagesize=3&sortBy=title&sortOrder=false 

С атрибутом маршрутизации вместо запроса является:

http://localhost/api/all//1/3/title/false 

Как заставить его работать с пустым значением (д)?

ответ

0

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

[HttpGet] 

[Route("all/{begin:int}/{pageSize:int}/{sortBy:alpha}/{sortOrder:alpha}/{q:alpha}")] 
public IActionResult GetAll(string q, int begin, int pageSize, string sortBy, bool sortOrder) 
{ 
    return Json(_repository.GetItemsByPage(q, begin, pageSize, sortBy, sortOrder)); 
} 

При этом ваш оба URL будут работать.

http://localhost/api/all/?q=&begin=1&pagesize=3&sortBy=title&sortOrder=false 

http://localhost/api/all/1/3/title/false 

http://localhost/api/all/1/3/title/false/value of q 

Теперь, если ваш метод имеет более одного необязательного параметра, существует несколько способов решения проблемы.

http://localhost/api/all/1/3/title/false?q=1&optinal2=value 

Или создать второй метод API.

+0

спасибо. Я переместил необязательный параметр в конце и использовал: '{q: alpha?}' –

Смежные вопросы