L'URL che sto cercando di far funzionare è nello stile di: http://somedomain.com/api/people/staff.33311 (proprio come i siti come LAST.FM consentono tutti i tipi di segni nei loro URL RESTFul e WebPage , ad esempio " http://www.last.fm/artist/psy'aviah " è un URL valido per LAST.FM).
Ciò che funziona sono i seguenti scenari: - http://somedomain.com/api/people/ - che restituisce tutte le persone - http://somedomain.com/api/people/staff33311 - funzionerebbe anche, ma non è quello che io ' m dopo vorrei che l'URL accetti un "punto", come nell'esempio seguente - http://somedomain.com/api/people/staff.33311 - ma questo mi dà un
HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
Ho impostato le seguenti cose:
Il controller "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); }
Il 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 } ); }
Ho già provato a seguire tutti i suggerimenti di questo post del blog http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx ma continua a non funzionare .. Penso anche che sia abbastanza noioso e mi chiedo se non ce ne sia un altro, modo migliore e più sicuro.
Abbiamo i nostri ID internamente in questo modo, quindi dovremo trovare una soluzione per adattare il punto in un modo o nell'altro, preferibilmente nello stile di "." ma sono aperto a suggerimenti alternativi per gli URL, se necessario ...