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 - также будет работать, но это не то, что я ' m после того, как я хочу, чтобы 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 } ); }
Я уже пробовал следовать всем советам этого сообщения в блоге http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx, но он все равно не сработает .. Я также думаю, что это довольно утомительно, и мне интересно, нет ли другого, лучший и более безопасный способ.
У нас есть внутренний идентификатор, подобный этому, поэтому нам нужно будет найти решение, чтобы так или иначе уместить точку, предпочтительно в стиле "." но при необходимости я открыт для альтернативных предложений по URL ...