gpt4 book ai didi

c# - 如何使用 Asp.Net WebAPI 进行路由?

转载 作者:太空宇宙 更新时间:2023-11-03 21:54:17 25 4
gpt4 key购买 nike

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

 GET Api/Items

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

当浏览 stackoverflow 2.0 api 以了解他们如何解决这个问题时,他们将 URLS 命名如下:

 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 }
);

但随后它会为我不喜欢的所有 Controller 添加 MostPopular 位。

这样的东西有用吗?

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

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

最佳答案

最好的办法是添加另一个获取操作并配置通用路由而不是特定路由。

首先为最受欢迎的添加 Action

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

设置路由来处理 Action 。

// 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}"
);

关于c# - 如何使用 Asp.Net WebAPI 进行路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13010632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com