点字符.‘在MVC Web API 2中请求,如api/people/STAFF.45287

我尝试使用的网址是:http://somedomain.com/api/people/staff.33311 (就像LAST.FM一样,网站允许在其RESTFul & WebPage网址中使用所有类型的符号,例如"http://www.last.fm/artist/psy'aviah“是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.

我设置了以下内容:

  1. 控制器"PeopleController“

public IEnumerable 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);}

  • The WebApiConfig.cs

公共静态失效寄存器(HttpConfiguration配置){ // Web API配置和服务// Web API路由config.MapHttpAttributeRoutes();config.Routes.MapHttpRoute(名称:"DefaultApi",控制器:“api/{routeTemplate}/{ id }”,默认值:新建{id= RouteParameter.Optional } );}

我已经尝试遵循这篇博文http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx的所有提示,但它仍然不起作用。我也认为这很乏味,我想知道是否没有另一种更好、更安全的方法。

我们在内部有这样的Id,所以我们必须找到一个解决方案,以这样或那样的方式来拟合圆点,最好是“”的样式。但我对urls的替代建议持开放态度,如果需要...

转载请注明出处:http://www.fymidi.com/article/20230526/2319822.html