我正在将WebAPI 2与EF和来自Visual Studio的脚手架webapi控制器一起使用。每个控制器都是用4个默认动词(GET,PUT,DELETE,POST)和5个动作创建的。而有两种版本的GET操作。
IQueryable<entity> GetEntities ()
Task<IHttpActionResult> GetEntity(GUID key)
//默认是int id,但我改为guid。我正在为控制器使用属性路由和路由前缀。只是一些精美的关键字,可以更好地管理网址。[RoutePrefix("api/v3/Company")]
问题 :
理想情况下,如果在url中发送了错误的参数,它应该返回错误,但不会引发错误,而是会退回到没有参数的情况下进行操作。而如果我发送错误的GUID,则会显示错误。
就像我打电话给我一样: http://localhost:8080/api/v3/Company/1f7dc74f-af14-428d-aa31-147628e965b2
它显示正确的结果。
当我打电话时:(http://localhost:8080/api/v3/Company/1f7dc74f-af14-428d-aa31-147628e96500
错误的按键)
它恢复GetEntity()
功能并显示所有记录
当我打电话时:(http://localhost:8080/api/v3/Company/1
不是GUID长度参数)
它执行相同的操作并显示所有记录。
我正在使用属性 [Route("{id:guid}")]
如果能从中获得一些指导,我将不胜感激!
路由很可能默认返回到基于约定的映射。您需要在操作上显式应用route属性,以使路由知道这是获得GET的默认路由
[RoutePrefix("api/v3/Company")]
public class CompanyController : ApiController {
//GET api/v3/Company
[HttpGet]
[Route("")] //Default Get
public IQueryable GetEntities() { ... }
//GET api/v3/Company/1f7dc74f-af14-428d-aa31-147628e965b2
[HttpGet]
[Route("{id:guid}")] // ALSO NOTE THAT THE PARAMETER NAMES HAVE TO MATCH
public Task<IHttpActionResult> GetEntity(Guid id) { ... }
//...other code removed for brevity
}
确保在Web API配置中启用了属性路由
config.MapHttpAttributeRoutes();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句