繁体   English   中英

如何使用Asp.Net WebAPI进行此操作?

[英]how would one route this using Asp.Net WebAPI?

我正在做一个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 }
 );

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

最好的方法是添加另一个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}"
);

如果你没有偏离默认值,可能是最好的可维护的,但是你应该在路由中指定控制器和动作,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM