ASP.NET Web API 2 - 定义控制器到方法的映射?

时间:2014-05-30 20:53:52

标签: asp.net-web-api2 asp.net-web-api-routing

Microsoft提供了一个很好的教程,可以让您的第一个ASP.NET Web API项目继续进行:

http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api

...但我不清楚 - 如何定义API URI和我的C#控制器方法之间的映射?

代表:

/api/products/{id}

解析为

public IHttpActionResult GetProduct(int id)
{
    [...]
}

...但我不确定如何。 AUTOMAGIC?

我问,因为我想为这个URI创建一个新的映射:

/api/setReportNotificationsAsRead?uid={username}&items={itemIDs}

在我的控制器中使用这个新方法:

public IHttpActionResult SetReportNotificationsAsRead(string username, string itemIDs)
{
    [...]
}

2 个答案:

答案 0 :(得分:4)

...but im not sure how. automagic?

Automagic在于Web API中的HTTP Verbs。如果您为WebAPI发出GET请求,route / api / products / {id}可以映射到以GET开头的任何内容(或者只是方法名称Get)。

如果您发出POST请求,那么它将映射到任何POST方法(否则您使用路由前缀)。

link可以帮助你理解魔法。这也可以帮助您了解如何配置要调用的SetReportNotificationsAsRead函数。

答案 1 :(得分:2)

你非常接近有一个有效的解决方案。您将方法参数名称混淆了:

public IHttpActionResult SetReportNotificationsAsRead(string uid, string items)
{
    //Do your stuff!
}

HTTP GET参数的名称应与方法参数的名称匹配。这是ASP.NET MVC命名约定的一部分。

最后要注意的是,如果您实际上期望一组项目(即多个项目ID),您实际上可以节省一些工作并使用string[]参数,只要您的HTTP参数正确发送即可。在这种情况下,您希望URI看起来像:/api/setReportNotificationsAsRead?items=123&items=456&items=789。注意参数名称如何重复多次,但值不同。

有关路由系统的更多信息,我建议您转到ASP.NET MVC routing overview