O URL que estou tentando deixar funcionar é no estilo de: http://somedomain.com/api/people/staff.33311 (assim como sites como LAST.FM permitem todos os tipos de sinais em seus URLs RESTFul e WebPage , por exemplo " http://www.last.fm/artist/psy'aviah " é um url válido para LAST.FM).
O que funciona são os seguintes cenários: - http://somedomain.com/api/people/ - que retorna todas as pessoas - http://somedomain.com/api/people/staff33311 - funcionaria bem, mas não é o que eu ' m depois de querer que o url aceite um "ponto", como no exemplo abaixo - http://somedomain.com/api/people/staff.33311 - mas isso me dá um
HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
Eu configurei as seguintes coisas:
O controlador "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); }
O 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 } ); }
Já tentei seguir todas as dicas desta postagem do blog http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx, mas ainda não funcionou .. Também acho que é bastante entediante e me pergunto se não há outro, maneira melhor e mais segura.
Temos nossos IDs internamente assim, então vamos ter que encontrar uma solução para encaixar o ponto de uma forma ou de outra, de preferência no estilo "." mas estou aberto a sugestões alternativas de urls, se necessário ...