Adres URL, który próbuję udostępnić, jest w stylu: http://somedomain.com/api/people/staff.33311 (podobnie jak witryny LAST.FM zezwalają na wszelkiego rodzaju znaki w swoich adresach URL RESTFul & WebPage , na przykład „ http://www.last.fm/artist/psy'aviah ” to prawidłowy adres URL LAST.FM).
To, co działa, to następujące scenariusze: - http://somedomain.com/api/people/ - który zwraca wszystkich ludzi - http://somedomain.com/api/people/staff33311 - również by działał, ale to nie jest to, co ja ” m po tym, jak chciałbym, aby adres URL akceptował „kropkę”, jak w przykładzie poniżej - http://somedomain.com/api/people/staff.33311 - ale to daje mi
HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
Skonfigurowałem następujące rzeczy:
Kontroler „PeopleController”
public IEnumerable<Person> GetAllPeople() { return _people; } public IHttpActionResult GetPerson(string id) { var person = _people.FirstOrDefault(p => p.Id.ToLower().Equals(id.ToLower())); if (person == null) return NotFound(); return Ok(person); }
Plik WebApiConfig.cs
public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); }
Próbowałem już postępować zgodnie ze wszystkimi wskazówkami z tego wpisu na blogu http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx, ale nadal nie działa. Myślę też, że to dość żmudne i zastanawiam się, czy nie ma innego, lepszy i bezpieczniejszy sposób.
Mamy wewnętrzne Id, więc będziemy musieli znaleźć rozwiązanie, które pozwoli dopasować kropkę w taki czy inny sposób, najlepiej w stylu „”. ale jestem otwarty na alternatywne sugestie dotyczące adresów URL, jeśli zajdzie taka potrzeba ...