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 ...

questionAnswers(8)

yourAnswerToTheQuestion