WebAPI 2:使用错误的参数调用默认的GET ALL

沙赫扎德

我正在将WebAPI 2与EF和来自Visual Studio的脚手架webapi控制器一起使用。每个控制器都是用4个默认动词(GET,PUT,DELETE,POST)和5个动作创建的。而有两种版本的GET操作。

  1. IQueryable<entity> GetEntities ()
  2. 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章