我试图让工作的 URL 是一种风格的 URL:http ://somedomain.com/api/people/staff.33311(就像 LAST.FM 的网站允许在其 RESTFul 和网页 URL 中使用各种标志,例如“ http://www.last.fm/artist/psy'aviah ”是 LAST.FM 的有效 url)。
以下场景有效: - 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的所有提示进行操作,但它仍然无法正常工作。我也认为这很乏味,我想知道是否没有另一个,更好更安全的方式。
我们的 Id 在内部是这样的,所以我们必须找到一种解决方案来以某种方式匹配点,最好是“。”的样式。但如果需要,我愿意接受有关 url 的替代建议......