1

我正在制作一个 Restful 服务,其中我有一个项目列表,可以这样查询:

 GET Api/Items

其中列出了所有项目。但当然,我还需要将这些项目列为“最受欢迎”、“属于用户 x”或“属于 Y 类”

在查看 stackoverflow 2.0 api 以了解他们如何解决此问题时,他们将其 URL 命名如下:

 GET Api/Items/MostPopular

我想采用这种方法,因为它似乎很有意义并且看起来不错。

但是,如何配置 Web-API 以允许此 URL 语法?默认路由如下:

config.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}/{id}",
     defaults: new { id = RouteParameter.Optional }
);

所以我猜我需要在它前面添加我的额外路由。我可以这样做:(如果这甚至可行)

config.Routes.MapHttpRoute(
      name: "SpecializedApi",
      routeTemplate: "api/{controller}/MostPopular",
      defaults: new { id = RouteParameter.Optional }
);

但是它会为我所有不喜欢的控制器添加 MostPopular 位。

这样的事情有用吗?

 config.Routes.MapHttpRoute(
      name: "SpecializedApi",
      routeTemplate: "api/Items/MostPopular",
      defaults: new { id = RouteParameter.Optional }
 );

当我的路由表很快变得非常大并且可能无法维护时,这真的是要走的路吗?

4

2 回答 2

3

最好的办法是添加另一个 get 操作并配置通用route而不是specific路由。

首先添加最流行的动作

// add action for Most Popular
[ActionName("MostPopular")]
public MyResult GetMostPopular()
{
     return null;
}

设置路由来处理操作。

// Controller with ID
// To handle routes like `/api/Items/1`
config.Routes.MapHttpRoute(
    name: "ControllerAndId",
    routeTemplate: "api/{controller}/{id}",
    defaults: null,
    constraints: new { id = @"^\d+$" } // Only integers 
);

// Controllers with Actions
// To handle routes like `/api/Items/MostPopular`
config.Routes.MapHttpRoute(
    name: "ControllerAndAction",
    routeTemplate: "api/{controller}/{action}"
);
于 2012-10-22T11:52:15.953 回答
1

如果您不偏离默认设置,这可能是最好的可维护性,但是您应该在路由中指定控制器和操作,如下所示:

config.Routes.MapHttpRoute( 
    name: "SpecializedApi", 
    routeTemplate: "api/Items/MostPopular/{id}", 
    defaults: new { controller = "wheretogo",
                    action = "wichactiontotake",
                    id = RouteParameter.Optional 
                  } 
);

或者这也有效:

config.Routes.MapHttpRoute( 
    name: "SpecializedApi", 
    routeTemplate: "api/test/{action}/{id}.html",
    defaults: new { controller = "test" } 
);

在使用假文件配置 IIS 时查看此链接:http: //haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx

于 2012-10-22T11:52:37.203 回答