Je m'attends à un comportement suivant: lors de l'appel http://localhost:59060/api/games/
- il renvoie tous les jeux, lors de l'appel http://localhost:59060/api/games/aaa
- il retourne tous les jeux où DeviceId = aaa
.comment définir le routage pour l'application MVC lorsque obtenir prend un paramètre nullable
Actuellement quand je l'appelle http://localhost:59060/api/games/aaa
ou http://localhost:59060/api/games/
, l'erreur est:
Aucune ressource HTTP a été trouvé qui correspond à la demande URI
http://localhost:59060/api/games/
Aucune action n'a été trouvé sur le contrôleur « Jeux » qui correspond à la demande.
Contrôleur
public class GamesController : ApiController
{
private List<Game> _GamesRepository;
public GamesController()
{
_GamesRepository = CreateGamesRepository();
}
// GET api/Games/0xa16
public IEnumerable<Game> Get(string deviceId)
{
if (String.IsNullOrEmpty(deviceId))
{
return _GamesRepository;
}
else
{
return _GamesRepository.Where(x => x.DeviceId == deviceId);
}
}
}
Configuration
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "ControllerDefault",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "ApiDefault2",
url: "api/{controller}/{action}/{deviceId}",
defaults: new { action = "get", deviceId = UrlParameter.Optional }
);
Modèle
public class Game
{
public int TaskId { get; set; }
public string SalesForceId { get; set; }
public string Name { get; set; }
public string Thumbnail { get; set; }
public string DeviceId { get; set; }
}