ASP.NET WebAPI:OData 端点的通用控制器

2023-11-28

我目前正在 ASP.NET MVC 4 Web API 中试验 OData 端点。我喜欢这个概念,并尝试想出在我们的项目中使用它的有效方法。 我的一个问题如下:我们有一项服务能够返回 IQueryable 并将实体的名称作为输入:

public IQueryable GetAll(string entityName);

在标准 Web API(而不是 OData 控制器)中,我可以创建一个通用控制器,可以以 /api/entities/{entityName} 形式调用它并返回 IQueryable。 对于 OData 控制器,我执行以下特定于实体的步骤:

  1. 注册模型中的实体。
  2. 为派生自 EntitySetController 的每个实体创建一个单独的控制器。

我想使用通用服务并尽可能避免特定于实体的实现。如果服务可以返回实体和相应类型的列表,则第一步可以轻松自动化。 剩下步骤 2,因为到目前为止我需要为每个实体创建一个特定的控制器。我还想避免这种情况并创建一个使用通用服务的通用控制器。

谁能推荐一个解决方案,也许可以通过影响 OData 路由来实现?


您可以创建一个自定义路由约定,无论实体集是什么,该约定都选择相同的控制器。例子,

public class CustomControllerRoutingConvention : IODataRoutingConvention
{
    public string SelectAction(ODataPath odataPath, HttpControllerContext controllerContext, ILookup<string, HttpActionDescriptor> actionMap)
    {
        return null;
    }

    public string SelectController(ODataPath odataPath, HttpRequestMessage request)
    {
        return "SomeFixedContrllerNameWithoutTheControllerSuffix";
    }
}

您可以使用以下代码注册该路由约定,

IList<IODataRoutingConvention> routingConventions = ODataRoutingConventions.CreateDefault();
routingConventions.Insert(0, new CustomControllerRoutingConvention());
config.Routes.MapODataRoute("OData", "odata", builder.GetEdmModel(), new DefaultODataPathHandler(), routingConventions);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET WebAPI:OData 端点的通用控制器 的相关文章

随机推荐

  • 将 FopFactoryBuilder baseURI 设置为 jar 类路径

    我正在将 Apache FOP 1 0 项目升级到 Apache FOP 2 1 在此项目中 所有必需的文件都打包在 jar 文件中 我添加了新的 FopFactoryBuilder 来生成 FopFactory FopFactoryBui
  • CKEditor4:使文本不同于 HTML

    I add StrInsert plugin to my CKEditor It basically adds a button which in my editor is labeled CRM Field 该按钮的作用是将一个值附加到我
  • 首先将文本小写,然后大写。用CSS可以吗?

    首先将文本小写 然后大写 用CSS可以吗 编辑 示例 HELLO WORLD gt Hello World Edit2 我有一个全部大写的国家 地区列表 例如UNITED KINGDOM 我必须让它看起来像United Kingdom Ye
  • 在 ScrollViewer 中使用 WPF DataGrid 虚拟化

    我知道 DataGrid 支持虚拟化 因此它仅为可见行创建网格单元 但是 这似乎仅在 DataGrid 大小受到限制的情况下才有效 在我的场景中 DataGrid 放置在滚动查看器内 如下所示
  • 如何将 \x00 作为参数传递给程序?

    我有一个小程序 我希望将 shellcode 作为参数传递 在shellcode中 需要传递 x00 我尝试了以下命令 program python c print x01 x00 x00 x00 x9c xd8 xff xbf 但 x00
  • ag-网格行未删除

    我正在尝试从我的 ag Grid 中删除一行 如下所示 let alertRow RowNode this gridApi getRowNode rowIndex console log alertRow this gridApi upda
  • Borland x86 内联汇编器;获取标签的地址?

    我使用 Borland Turbo C 和一些内联汇编代码 因此大概是 Turbo Assembler TASM 风格的汇编代码 我希望做到以下几点 void foo bar void asm mov eax SomeLabel SomeL
  • 原则 2 映射引用唯一键

    基本问题 是否可以使用不引用主键而仅引用唯一键的 Doctrine 来映射关联 扩大的视野 我有一个实体 Participation which may参考2个其他实体 DropoutCause and DischargeType 根据此组
  • 错误:无法为 aiohttp 构建轮子,这是安装基于 pyproject.toml 的项目所必需的

    Python版本 3 11 通过以下方式安装应用程序的依赖项pip install r requirements txt给出以下错误 socket c o build temp linux armv8l cpython 311 aiohtt
  • 如何使用 Azure CLI(az ad 应用程序)创建范围

    使用 Azure CLI 2 x 我找不到在 Azure AD 门户中公开 API 部分下 添加范围 的方法 我所看到的是 如果我在创建应用程序时传递 identifier uris 则会自动设置 APP ID URI 和范围 az ad
  • 为什么在 Flux 应用程序架构中每个实体使用一个存储?

    我正在一个项目中使用reactjs 和flux 架构 我对如何将嵌套数据正确分解为存储以及为什么我应该将数据拆分为多个存储感到有点困惑 为了解释这个问题 我将使用这个例子 想象一个有项目的 Todo 应用程序 每个项目都有任务 每个任务都可
  • 变基合并提交

    假设我的 Git 存储库最初有两个分支 Foo 和 Bar Foo Bar 我创建了第三个分支 FooBar 在其中提交了其他两个分支的合并 Foo FooBar Bar FooBar 现在比 Foo 和 Bar 都领先一项 接下来 我做了
  • jqGrid 中的自定义聚合/分组

    Overview 我需要以某种方式自定义 jqGrid 插件 无论是通过巧妙的技巧 黑客攻击还是修改插件 以支持以下类型的聚合 分组 我将非常感谢 jqGrid 社区关于如何实现这一点的一些想法 Details 聚合 分组的工作原理如下 首
  • 如何在 Windows 窗体应用程序中显示矢量图形 (SVG)?

    有没有办法 最好是控件 在 Windows 窗体应用程序中显示矢量图形 最好是 SVG 我猜这很容易做到WPF 但我不想迁移该项目 GDI Graphics 类可以进行矢量图形 对于 SVG 您可以尝试将其加载到网页浏览器控件
  • C# 在任务栏缩略图上显示按钮

    在 WMP 中 任务栏缩略图上显示了按钮 如何用 C 为我的 winforms 应用程序制作它们 The WindowsAPI代码包包含一个名为ThumbnailToolBarButton您可以使用它来运行此功能 您需要确保每个按钮都有图标
  • 为 geom_vline 添加单独的图例

    我有这个数据框 dput df structure list X c 337L 338L 339L 340L 341L 342L 343L 344L 345L 346L 347L 348L 349L 350L 351L 352L 353L
  • 将多个 SSL 证书固定添加到 Android KeyStore 不起作用。 (来自资源文件)

    我想将资源文件中的多个 SSL 证书添加到 Android KeyStore 如下所示 if sslContext null loading CA from an InputStream InputStream is AVApplicati
  • 使用加法混合绘制图像

    问题得到了解答 有关更多信息 请查看本文末尾的编辑 4 我们目前正在开发一个游戏制作引擎 进展顺利 我正在研究动画创建器 想知道是否可以使用加法混合来绘制图像 让我解释 我们使用 C 的 System Drawing 库 并使用 Windo
  • 创建一个不依赖web的flutter项目

    我想使用VS在flutter中创建一个新项目 但我希望这个项目没有Web依赖 只是移动应用程序依赖 但每次我创建一个项目时 它都会给我Web依赖 而不是移动应用程序 例如 这是我得到的 这就是我想要的 您可以通过指定平台 使用 flutte
  • ASP.NET WebAPI:OData 端点的通用控制器

    我目前正在 ASP NET MVC 4 Web API 中试验 OData 端点 我喜欢这个概念 并尝试想出在我们的项目中使用它的有效方法 我的一个问题如下 我们有一项服务能够返回 IQueryable 并将实体的名称作为输入 public