Znak kropki „.” w MVC Web API 2 na żądanie, np. api / people / STAFF.45287
Adres URL, który próbuję zezwolić, to adres w stylu:http://somedomain.com/api/people/staff.33311 (podobnie jak strony jako LAST.FM zezwalają na wszelkiego rodzaju znaki w swoich adresach URL RESTFul i WebPage, na przykład ”http://www.last.fm/artist/psy'aviah„jest prawidłowym adresem URL LAST.FM).
Jakie są następujące scenariusze: -http://somedomain.com/api/people/ - który zwraca wszystkie osoby -http://somedomain.com/api/people/staff33311 - zadziałałoby również, ale nie to, co chcę, chciałbym, aby adres URL zaakceptował „kropkę”, jak w poniższym przykładzie -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.
Ustawił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);
}
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ż przestrzegać wszystkich wskazówek tego blogpostuhttp://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx ale nadal nie będzie działać. Myślę też, że to dość nudne i zastanawiam się, czy nie ma innego, lepszego i bezpieczniejszego sposobu.
Mamy nasze ID tak wewnętrznie, więc będziemy musieli znaleźć rozwiązanie, aby dopasować kropkę w taki czy inny sposób, najlepiej w stylu „.” ale w razie potrzeby jestem otwarty na alternatywne sugestie dotyczące adresów URL ...