Asp.NET WebApi 基于约定的方法 Url/Route 查询

2024-04-25

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

eg:

UsersController

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

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

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

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

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

非常感谢


Roles

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

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

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

然后,您的角色控制器将具有以下方法:

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 http://blog.apigee.com/detail/restful_api_design_can_your_api_give_developers_just_the_information在他们的书中here http://blog.apigee.com/detail/announcement_new_ebook_on_web_api_design.

如何使用 WebApi ASP.NET

假设使用 JSON 作为内容类型,那么之前已经问过类似的问题ASP.NET Web API部分响应Json序列化 https://stackoverflow.com/questions/13606675/asp-net-web-api-partial-response-json-serialization,简而言之,您需要将“?Fields=”或类似的查询参数传递到自定义中ContractResolver.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Asp.NET WebApi 基于约定的方法 Url/Route 查询 的相关文章

随机推荐

  • 在 python 中将 Latex 代码转换为 mathml 或 svg 代码

    是否有任何 python 代码允许获取乳胶代码 用于方程 并将其解析为 mathml 或 svg 代码 一个以字符串 latex 代码 作为参数并输出字符串 svg 或 mathml 代码 的简单函数将是完美的 附言 我找到了这个http
  • Bootstrap 4 导航栏
  • 列表
  • 我需要一些有关引导导航栏的帮助 Bootstrap v4 0 0 beta 3 我必须更改什么才能使按钮文本是单行而不是彼此之间 当该行已满时 其他按钮应从下一行的左侧开始 目前我使用这段代码
  • 服务器中的 Firebase 令牌管理

    我对 firebase 和 android 通知还是很陌生 我希望能够根据某些规则向单个用户发送通知 到目前为止我读到的是可以通过以下方式生成令牌 FirebaseInstanceId getInstance getToken 然后 令牌在
  • 您可以将 CMFCVisualManager 与基于对话框的应用程序一起使用吗?

    您可以将 CMFCVisualManager 与基于对话框的应用程序一起使用来更改应用程序的外观吗 如果是这样 它是如何完成的 这个想法是使用随 MSVC 2008 发布的 MFC 功能包来更改控件 例如按钮 的形状 颜色等 不 不能这样做
  • 必须在 PIMPL 中提供析构函数

    main pimpl sample cpp include pimpl sample hpp using namespace std int main pimpl sample p return 0 pimpl sample cpp inc
  • Hololens 模拟器中的网络摄像头支持

    笔记本电脑的网络摄像头可以在最新的Hololens模拟器中使用吗 我正在关注这个教程https learn microsoft com en us windows mixed reality mr azure 302 https learn
  • Byte-Buddy:方法拦截 InvoiceHandler 与 MethodDelegation 到 GeneralInterceptor

    我使用 Byte Buddy 动态生成 Java 接口方法的实现 并将对这些方法的调用委托给现有代理对象的单个方法 第一个版本的灵感来自如何使用 ByteBuddy 创建动态代理 https stackoverflow com questi
  • 根据当前用户过滤 Power BI 报告

    我们目前正在为我们公司开发 Power BI 仪表板 Office 365 并希望根据当前用户的偏好定制仪表板上的信息 我们公司有多个部门和子部门 因此向所有用户显示每个部门的数据会适得其反 例如 如果 Bob 属于欧洲销售 他将仅看到欧洲
  • 通过 Discord OAuth 传递字符串?

    我想知道是否可以使用 Discord OAuth 识别范围 同时还将重要的补充信息传递到重定向 URL site with important variable gt oauth page gt site that needs import
  • 超时设置为无限时间时出现超时异常

    在我的 C NET 3 5 应用程序中 我使用 CastleProject ActiveRecord 而不是 NHibernate 这是使用 MS SQL Server 2008 的桌面应用程序 我已将 ADO 命令超时设置为 0 以防止批
  • 语音识别和语调检测

    我想做一个 iOS 应用来计算疑问句 我会寻找 WH 问题以及 我会吗 格式化问题 我对语音或音频技术领域不太了解 但我Google了一下 发现语音识别SDK很少 但仍然不知道如何检测和绘制语调 是否有支持语调或情感语音识别的 SDK 据我
  • 如何从对话框片段获取主机片段中的按钮点击

    我有一个 listFragment 我想在 listItemClick 上显示 DialogFragment 是 否 我想取回 listFragment 中的用户选择 是 否 我已经阅读了有关侦听器接口机制的信息 但它与 Activityf
  • Google Analytics 未在 Swift 中初始化

    由于某种原因 我的新 swift 应用程序没有初始化 Google Analytics 我在项目中为所有 GAnalytics 文件创建了一个桥接标头 import GAI h import GAIDictionaryBuilder h i
  • 使用 cmake 和 Visual Studio 的一个解决方案中的多个项目

    我有一个 Visual Studio 2010 解决方案 其中包含 5 个项目 两个库和三个应用程序 依赖于库 我现在想将构建系统迁移到 CMake 也能够在 Linux 下编译 我已经了解了如何为一个项目编写 CMakeLists txt
  • Java HashSet 中元素的排序

    为什么第二组和第三组保持顺序 Integer j new Integer 3 4 5 6 7 8 9 LinkedHashSet
  • 在 Homestead 中配置 php.ini

    我正在尝试更改变量最大输入变量在我的 php ini 文件中指定 How many GET POST COOKIE input variables may be accepted max input vars 2500 和跑步 sudo n
  • 有没有办法在 Visual Basic 6.0 应用程序中添加全局错误处理程序?

    VB 6 0没有任何全局处理程序 为了捕获运行时错误 我们需要在每个我们认为可能发生错误的方法中添加一个处理程序 但是 仍然有一些地方可能被遗漏 所以 我们最终会遇到运行时错误 在应用程序的所有方法中添加错误处理程序 唯一的方法吗 不 无法
  • Windows 中的 SQLAlchemy 引擎绝对路径 URL

    我正在尝试连接到 Windows 7 x64 计算机上的 python 3 3 应用程序中的 sqlite database 文件 为此 文档指出 sqlite
  • IOS Safari URL UTI 分享表

    我正在尝试使用 safari 共享按钮和共享表将当前 URL 从 safari 传递到我的应用程序 我希望它进入我的应用程序 而不是让它成为共享扩展 在 Safari 中 共享表不显示我的应用程序 我已注册以下文档类型 UTI 但未成功 p
  • Asp.NET WebApi 基于约定的方法 Url/Route 查询

    我不确定基于 ASP NET WebAPI 约定的休息服务的 最佳实践 前进方向 该服务需要返回资源的 子属性 eg UsersController public User Get int id returns named user via