我可以在 Web API 中使用多个具有不同复杂参数类型的 POST 方法吗?

2024-01-18

我是 Web API 新手... 这是我的基本路线:

config.Routes.MapHttpRoute(
  name: "Workitems",
  routeTemplate: "api/{controller}/{workitemID}",
  defaults: new { controller = "workitems", workitemID = RouteParameter.Optional }
);

这就是我想要的:

public HttpResponseMessage Post( [FromBody] FolderModel theModel )
public HttpResponseMessage Post( [FromBody] DocumentModel theModel )

但是,Web API 找不到我的第二个 Post 方法。我在这里和谷歌中进行了大量搜索,但没有找到任何适合我的东西(好吧)。我知道我可以向第二个方法添加第二个未使用的参数 - 但这太过分了。如果这是正常的 C# 代码,编译器将毫无问题地知道选择哪个,因为方法具有不同的签名。但Web API不够智能。

我查看了自定义约束,但这似乎不合适。我也无法使用不同的 {actions},因为这违反了我的 API 的 RESTful 约束(没有 RPC,只有资源)。我也无法将第二篇文章放在不同的控制器上。

我让它工作的唯一方法是将FolderModel和DocumentModel包装在父对象中,如下所示:

public class WorkitemCreateModel
{
    public DocumentModel Document { get; set; }
    public FolderModel Folder { get; set; }
}

public HttpResponseMessage Post( [FromBody] WorkitemCreateModel theModel )

然后有一个采用 WorkitemCreateModel 的 Post 方法。但是,使用我的 API 的开发人员有责任必须传入 WorkitemCreateModel,但只能传入 DocumentModel 对象或 FolderModel 对象。这也很烦人,因为我的 GET API 可以返回 DocumentModel 对象或FolderModel 对象。因此,最好将从 GET 获取的对象传递到 POST 中。但这不起作用,他们必须首先将其包装在 WorkitemCreateModel 对象中。

还有其他建议吗?

顺便说一句:这个网站是最好的!我在这里找到了很多答案!


这可能是一篇旧帖子,但我添加此信息只是为了像我这样来这里寻找答案的人。

这里的简短答案是不,这是不可能的.

问题在于路由的工作方式,尤其是选择使用哪种操作方法的部分。以下是 ASP .NET 文章的摘录(https://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection https://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection),

选择算法的目标是在调用任何绑定之前从静态描述中选择一个操作。因此,复杂类型被排除在匹配算法之外。

因此,在将操作方法​​与路径匹配时,Web API忽略所有复杂类型在该方法的参数列表中,当您这样做时,您的两个方法都有 0 个参数,这就是您面临此问题的原因。

希望这可以帮助...

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

我可以在 Web API 中使用多个具有不同复杂参数类型的 POST 方法吗? 的相关文章

  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐

  • 将子类转换为超类后调用方法的有趣行为

    class A int i 1 int f return i class B extends A int i 2 int Override f return i public class override test public stati
  • 在MySQL中存储图像[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 请给我在 MySQL 数据库中插入图像的查询 我是 stackoverflow 的新手 所以如果我的问题不符合标准 请忽略我 如果映像位于您
  • 人工智能中与最佳优先搜索相关的问题有哪些?

    我知道一般问题包括局部最大值和高原 但是我很好奇是否还有与此特定搜索相关的更多问题 以及为了克服这些问题我的最佳行动方案是什么 有人还可以给我一个例子 说明该搜索适合用于哪种类型的问题吗 最佳优先搜索的问题 它很贪婪 在许多情况下 它会带来
  • MySQL 中 utf8mb4 和 utf8 字符集有什么区别?

    有什么区别utf8mb4 and utf8字符集在MySQL 我已经知道了ASCII UTF 8 UTF 16 and UTF 32编码 但我很想知道有什么区别utf8mb4具有其他编码类型定义的编码组MySQL服务器 使用有什么特别的好处
  • TypeScript 使用实例访问静态变量

    所以在大多数OOP语言中静态变量也可以被称为class变量 即它们的值为shared在该类的所有实例中 例如 在我的游戏中我有一堂课Bullet其扩展为GreenBullet and PinkBullet 我希望这些子类有一个名为 类 或
  • 带有 date_trunk 函数和时区的 Django ORM

    我想用日期截断SQL 函数 但它似乎不适用于时区 使用 Django 进行测试 1 from django db import connection cursor connection cursor cursor execute SELEC
  • SVN 1.3 VS 1.5(最新)

    我们的IT人员已经安装了SVN 1 3 当前版本是1 5 我们正在从 CVS 迁移到 SVN 那么继续使用 1 3 会损失很多吗 我喜欢运行 CVS2SVN 并转移到 SVN 而不需要编写任何脚本 另外 在 CVS 中 我们的项目中有多个目
  • 如果视口为 480 像素或更小,请更改为 FullCalendar 中的 basicDay 视图?

    有没有一种简单的方法可以根据 FullCalendar 中的当前视口大小更改用户的视图 我想做的是在桌面上显示月视图 如果使用 iPhone 或移动设备则显示日视图 目前 使用月视图时 所有事件都被压缩在移动设备上 当前代码 documen
  • scandir - 对数字文件名进行排序

    做了一些搜索 但似乎找不到我正在寻找的确切答案 我想使用 scandir dir 提取带有编号文件名的文件 但让它们正确排序 例如 文件名是 1 something ext 2 something else ext 3 a third na
  • 如何设置等于Android上另一个小部件的宽度

    我需要在文本字段下方绘制一条水平线 使线的宽度等于文本宽度 而不是全屏的宽度 在我的应用程序中 我在视图 水平线 下方有一个文本视图 这线视图的宽度应等于文本视图的宽度 我尝试了 android layout width wrap cont
  • 匹配有效命名空间名称的正则表达式

    我以为这个问题以前有人问过 但我尝试谷歌但没有找到答案 也许我使用了错误的关键字 是否可以使用正则表达式来匹配有效的 C 命名空间名称 Update 感谢大家的回答和研究 这个问题比我想象的要复杂得多 作为奥斯卡 梅德罗斯 https st
  • 从 IIS 上的命令行列出所有托管网站

    我们如何通过 IIS 命令行列出所有托管网站 您可能必须以管理员身份运行它 appcmd list site 直接来自http technet microsoft com en us library cc771280 v ws 10 asp
  • 将一种类型的同构 HList 映射到不同类型的异构 List

    我有一个字符串 HList val strings The Lorax Dr Suess HNil 在另一个特殊类型列表中 case class Title title String words List String case class
  • 在 DAG 中使用 boto3 时,Apache Airflow 无法找到 AWS 凭证

    我们正在使用 ECS Fargate 迁移到 Apache Airflow 我们面临的问题 很简单 我们有一个简单的 DAG 其任务之一是与 AWS 中的某些外部服务进行通信 比方说 从 S3 下载文件 这是 DAG 的脚本 from ai
  • 是否有一个不重复的 List 实现?

    我知道关于SortedSet https docs oracle com javase 9 docs api java util SortedSet html 但就我而言 我需要一些实现List 并不是Set 那么 API 或其他地方是否有
  • 在 C++ 中保存 QML 图像

    我正在尝试使用 qml 显示网络图像 然后使用 c 代码保存该图像 这是qml代码 import QtQuick 2 3 import QtQuick Window 2 2 import com login 1 0 Window visib
  • Android Facebook SDK - 共享对话框不响应取消回调

    我正在我的 Android 应用程序上使用 Facebook sdk 4 0 我发现了这个问题 当我分享帖子时 我可以看到facebook界面 我可以完美地发布和取消它 我注册了回调 但是如果按取消按钮 则不会调用 onCancel 回调
  • C# 根据组合框选择启用/禁用多个文本框

    我只是一个正在学习如何编码的普通人 我不喜欢代码看起来很草率并且可以合并 话虽这么说 我需要合并一些代码 但我未能找到有关如何执行此操作的信息 我正在尝试根据组合框选择启用 禁用多个文本框 这是我试图整合的又长又丑的代码 private v
  • 如何在 Parcel 中使用 writeStringArray() 和 readStringArray()

    我最近在 Android 中遇到了一个非常愚蠢的 至少从我的角度来看 实现Parcel class 假设我有一个像这样的简单课程 class Foo implements Parcelable private String bars oth
  • 我可以在 Web API 中使用多个具有不同复杂参数类型的 POST 方法吗?

    我是 Web API 新手 这是我的基本路线 config Routes MapHttpRoute name Workitems routeTemplate api controller workitemID defaults new co