Сделать необязательным параметр шаблона маршрута {catalogBrandId?}
[Route("items/type/{catalogTypeId}/brand/{catalogBrandId?}")]
public async Task<IActionResult> Items(int? catalogTypeId, int? catalogBrandId = null, [FromQuery] int pageSize = 6, [FromQuery] int pageIndex = 0)
и исключить его из URL
items/type/1/brand?pageSize=6&pageIndex=0
Для получения более чистого URL вы должны использовать несколько маршрутов
[Route("items")]
[Route("items/type/{catalogTypeId}")]
[Route("items/type/{catalogTypeId}/brand/{catalogBrandId}")]
public async Task<IActionResult> Items(int? catalogTypeId = null, int? catalogBrandId = null, [FromQuery] int pageSize = 6, [FromQuery] int pageIndex = 0)
Обратите внимание, что шаблон больше не является обязательным, но параметр в действии является необязательным.
Это позволит
items?pageSize=6&pageIndex=0
items/type/1?pageSize=6&pageIndex=0
items/type/1/brand/2?pageSize=6&pageIndex=0