使用webapi管理api服务中的许多方法路由

时间:2013-01-11 12:06:27

标签: asp.net-mvc architecture routing asp.net-web-api

这是一个简单的问题,在asp.net web api项目中管理多种方法

我们有很多这样的方法:

ProductsApiController.GetByType(string type, string x)
ProductsApiController.GetByType(string type, int limit)
//method has a number of arguments.. 
ReportsApiController.GetAll(string x, string y)

问题:我们有大量使用自定义参数的方法,我们必须为每个参数定义自定义路线

routes.MapRoute(
    name: "ProductRoute",
    url: "ProductsApiController/{type}/{x}"
);

routes.MapRoute(
    name: "ReportRoute",
    url: "ReportsApiController/{x}/{y}"
);

我正在简化签名,有许多方法有很多参数,这些方法通常没有共同的参数。

这是什么一般模式?有没有更好的方法来做到这一点,或者我只留下这个。

2 个答案:

答案 0 :(得分:1)

这是在查询字符串中传递URI参数变得非常方便的情况。您可以只定义一个路由,然后通过查询传递该操作的所有URI参数(例如ReportsApi / GetAll?x = 5& y = 6)。您只需定义一个路径,该路径模板还包含操作({controller} / {action})。

否则,如果你想以不同的方式在路径中传递所有参数,我想不出更好的方法。因为您必须让路由系统知道从哪里获取每个参数以及它应该绑定到哪个参数名称。没有用于以查询字符串参数的方式决定参数名称的约定。您可以查看Filip在下面使用属性路由的好建议。它不会减少你必须编写的路由数量,但至少它们会更接近你需要它们的代码。

答案 1 :(得分:1)

我想对于您的场景,最合乎逻辑的解决方案是使用属性路由。

是的,它仍然意味着你必须创建很多路由,但由于它们实际上与单个动作相关联,因此在属性中使用路径来装饰此动作是最有意义的。

你可以从Nuget获得AR:

PM> Install-Package AttributeRouting.WebApi

在你的情况下,它看起来像这样:

[GET("mytype/{type}/{x}")]
public MyType GetByType(string type, string x)

[GET("mytype/{type}/{limit}")]
public MyType GetByType(string type, int limit)

依旧...... 其中,恕我直言,更容易管理

前段时间我给AR写了一篇简介 - http://www.strathweb.com/2012/05/attribute-based-routing-in-asp-net-web-api/

您还可以访问他们出色的维基 - https://github.com/mccalltd/AttributeRouting/wiki