Asp.net web api 具有相同声明的两个方法的ASP.NET web api路由

Asp.net web api 具有相同声明的两个方法的ASP.NET web api路由,asp.net-web-api,Asp.net Web Api,我正在使用Asp.net web api创建一个api。我有控制器BookController,有两种方法: GetBook(int-id)返回具有给定id和 GetBook(int-userId)返回给定用户的所有书籍 如果我调用localhost/book/3调用哪个方法会有歧义。我如何区分这两个方法?使用不同的http动词有一种很难理解的方法 [HttpGet] public int GetUsers(int i) { return 0; } [HttpPost] public in

我正在使用Asp.net web api创建一个api。我有控制器
BookController
,有两种方法:

  • GetBook(int-id)
    返回具有给定id和
  • GetBook(int-userId)
    返回给定用户的所有书籍

如果我调用
localhost/book/3
调用哪个方法会有歧义。我如何区分这两个方法?

使用不同的http动词有一种很难理解的方法

[HttpGet]
public int GetUsers(int i) { return 0; }

[HttpPost]
public int GetBooks(int i) { return 1; }

但我认为应该使用添加控制器或参数。

忘记黑客攻击,这是常识。为了用户和开发人员的理智起见,只需更改路由和方法名称,就可以清楚地消除这些不同操作的歧义。一种解决方案可能是将/user/3/books和books/3分别映射到GetBooksByUser和GetBooks。使代码和URI更具可读性。

我将有两个控制器:书籍和用户。 对于书籍:api/Books/3将带来书籍3,对于用户:api/Users/3将带来用户3

您是否查阅了ASP.NET Web API的基本教程?他们很棒,我一直在关注他们,这让一切变得非常简单:


这不适用于WebAPI开箱即用的路由。它使用名称匹配语义,在http Get进入时查找以“Get…”开头的方法。因此,在post上,它会搜索一个名为“post…”的方法,但不会看到
GetBooks
see,例如: