У меня есть метод действия в контроллере: -

[RoutePrefix("api/forces")]
public class ForceController : Controller
{
   [HttpGet]
   [Route("{showAll?}")]
   public IHttpActionResult GetForces(bool? showAll)
   {
       IEnumerable<Force> forces=  forceRepository.GetAll().ToList();
       if(!showAll)
        {
            forces = forces.ToList().Where(u => u.IsActive);
        }
       return Ok(new { data= forces, message = "The forces are with you" });
   }
}

Я хочу, чтобы оба URL-адреса ниже были перенаправлены на действие

api/forces
api/forces/true

Я думал, что текущий атрибут маршрута будет работать, но он работает только для второго URL-адреса, то есть api / force / true, а не для первого. api / users.

1
Sola Oderinde 26 Фев 2016 в 17:19

2 ответа

Вы можете просто использовать маршрут по умолчанию [Route()], который заставит передать параметр showAll через строку запроса. Это примет

/api/forces
/api/forces?showAll=true
/api/forces?showAll=false
3
Chris Pickford 26 Фев 2016 в 14:27

Вам необходимо указать значение для параметра showAll, потому что оно не является необязательным (возможность обнуления не считается). Сделав это необязательным, вы решите проблему.

[HttpGet]
[Route("{showAll?}")]
public IHttpActionResult GetForces(bool? showAll = null)
{
    ...
}
1
Tim Rogers 26 Фев 2016 в 14:34