gpt4 book ai didi

asp.net-web-api - Asp.NET WebApi 基于约定的方法 Url/Route 查询

转载 作者:行者123 更新时间:2023-12-02 02:06:29 24 4
gpt4 key购买 nike

对于需要返回资源的“子属性”的基于 asp.net webapi 约定的休息服务,我不确定“最佳实践”的前进方向。

例如:

UsersController

public User Get(int id) { ... } //returns named user via /api/v1/Users/23

但是如果我想返回给定的用户角色集合,我想我想要一个 /api/v1/Users/23/Roles

的 url

如果您使用我的 API,您认为这可以接受吗?

如果可以接受,我的 routeTemplate 和方法签名会是什么样子(抱歉,如果这很明显 - 我今天真的很困惑)

我能找到的所有 web api 示例都太简单了,只使用 DELETE、PUT、POST 和两个 GET - 似乎没有一个涵盖任何子属性(如上)或部分响应/api/v1/Users/23?fields=id,name - 如果有人知道那里有一个很好的例子,那就太棒了。

非常感谢

最佳答案

角色

角色看起来是一个非常明智的子资源。

假设您想要使用 http 动词列出和删除用户的角色...那么您可以使用两个 Controller ,一个用于用户,另一个用于角色。您的路线将如下所示:

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

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

然后您的角色 Controller 将具有如下方法:

public class RolesController : ApiController
{
// GET api/v1/users/1/roles
public IEnumerable<Role> Get(int userId)
{
//
}

// GET api/v1/users/1/roles/1
public IEnumerable<Role> Get(int userId, int id)
{
//
}

}

作为用户部分响应的角色

请求使用什么格式和标准:

apigee 在他们的网站上制作了一本免费的电子书,他们在其中提出了设计建议和对现有 API 的观察。

他们描述了来自 LinkedIn、Facebook 和 Google 的部分响应示例。它包含在他们的一个博客中 here在他们的书中 here .

如何使用 WebApi ASP.NET

假设使用JSON作为内容类型,那么在ASP.NET Web API partial response Json serialization之前已经问过类似的问题了,简而言之,您需要将“?Fields=”或类似的查询参数传递到自定义 ContractResolver 中。

关于asp.net-web-api - Asp.NET WebApi 基于约定的方法 Url/Route 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14773720/

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