URL-адрес, который я пытаюсь разрешить, - это один из вариантов: http://somedomain.com/api/people/staff.33311 (так же, как сайты, такие как LAST.FM, позволяют все виды знаков в их URL-адреса RESTFul и WebPage, например "http://www.last.fm/artist/psy'aviah" является действительным URL для LAST.FM).
В чем работают следующие сценарии: - http://somedomain.com/api/people/ - который возвращает всех людей - http://somedomain.com/api/people/staff33311 - тоже будет работать, но это не то, что я после Я бы хотел, чтобы url принимал "точку", как пример ниже - http://somedomain.com/api/people/staff.33311 - но это дает мне
HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
Я установил следующие вещи:
-
Контроллер "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 } ); }
Я уже пробовал следовать всем советам этого blogpost http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx, но он все равно не сработает. Я также думаю, что это довольно утомительно, и мне интересно, не является другим, лучшим и безопасным способом.
У нас есть внутренний идентификатор внутри, так что нам нужно будет найти решение, чтобы оно соответствовало точке так или иначе, предпочтительно в стиле ".". но я открыт для альтернативных предложений для URL-адресов, если это необходимо...