Web Api 属性路由中的可选参数

2024-02-12

我想处理以下 API 调用的 POST:

/v1/location/deviceid/appid

附加参数来自 Post-Body。

这一切对我来说都很好。现在我想通过允许“设备 id”和/或“应用程序 id”和/或正文数据为空来扩展我的代码:

/v1/location/deviceid
/v1/location/appid
/v1/location/

这 3 个 URL 应通过相同的路由进行响应。

我的第一个方法(需要 BodyData):

[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody] location_fromuser BodyData)
{
    return repository.AddNewLocation(deviceid, appid, BodyData);
}

这不起作用并返回编译错误:

“可选参数必须位于末尾”

下一步尝试:

[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, string appid = null)

现在我的函数 AddNewLocation() 总是得到BodyData=null- 即使调用发送正文。

最后我将所有 3 个参数设置为可选:

[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody location_fromuser BodyData = null)

不工作:

可选参数BodyData不支持FormatterParameterBinding.

为什么我需要一个带有可选参数的解决方案?我的控制器仅通过 POST 处理“添加新位置”。

我想发送错误数据我自己的异常或错误消息。即使调用有缺失值。在这种情况下,我希望能够决定通过我的代码引发异常或设置默认值。


对于传入的请求,例如/v1/location/1234,正如你可以想象的那样,Web API 很难自动找出“1234”对应的段的值是否与appid并且不deviceid.

我认为你应该将你的路线模板更改为[Route("v1/location/{deviceOrAppid?}", Name = "AddNewLocation")]然后解析deiveOrAppid找出 id 的类型。

此外,您还需要将路线模板本身中的段设置为可选,否则这些段将被视为必需。请注意?在这种情况下的角色。 例如:[Route("v1/location/{deviceOrAppid?}", Name = "AddNewLocation")]

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

Web Api 属性路由中的可选参数 的相关文章

  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • C# 和月历,选择多个日期

    我正在制作一个程序 可以帮助人们用 C 为某个部门 预订 订单 他们需要能够选择不同月份的多个日期 我更愿意拥有它 这样他们就可以单击一个日期 然后按住 Shift 键单击另一个日期以选择这两个日期之间的所有日期 并控制单击以进行单选 取消
  • libtool 在 Ubuntu 13.04 上构建 thrift 0.9.1 时出错

    在 Ubuntu 13 04 上构建 thrift 0 9 1 支持 C C java C perl python 时出现此错误 configure 不带任何选项运行 make 不带任何选项运行 Making all in test mak
  • C# Outlook 从收件人获取 CompanyName 属性

    我目前正在使用 C 编写 Outlook 2010 AddIn 我想要的是从我从 AppointmentItem 中提取的 Recipient 对象中获取 CompanyName 属性 因此 有了 AppointmentItem 的收件人
  • C++中的类要具备什么条件才能成为容器?

    我是 C 编程新手 偶然发现了这个术语containers举例如下vector deque map etc 一个企业的最低要求应该是什么class应该满足被称为container in C 我将从 范围 这个概念开始 Range 只有两个方
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • 从时间列表中查找最接近的时间

    所以 这是场景 我有一个带有创建时间的文件 我想从该文件的创建时间最接近或相等的时间列表中选择一个时间 完成此操作的最佳方法是什么 var closestTime listOfTimes OrderBy t gt Math Abs t fi
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • “没有合适的默认构造函数可用”——为什么会调用默认构造函数?

    我已经查看了与此相关的其他一些问题 但我不明白为什么在我的情况下甚至应该调用默认构造函数 我可以只提供一个默认构造函数 但我想了解它为什么这样做以及它会产生什么影响 error C2512 CubeGeometry no appropria
  • 如何设置消息队列的所有者?

    System Messaging MessageQueue 类不提供设置队列所有权的方法 如何以编程方式设置 MSMQ 消息队列的所有者 简短的答案是 p invoke 对 windows api 函数的调用MQSetQueueSecuri
  • 如何使用 C# 查询远程 MS ACCESS .mdb 数据库

    我正在尝试使用 C 查询 mote MS ACCESS 数据库 mdb 文件 将文件复制到本地计算机时可以成功查询它 我只想远程放置文件 所以我的客户端程序不包含原始数据 static string m path http www xyz
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • 测验;这个编译了吗?如果是的话它会返回什么(我知道答案)

    我最近发现这个错字 if name find string npos 显然开发者的意思是输入 if name find string npos 但令我惊讶的是发现错误甚至编译 Wall Werror 没有尝试过 pedantic 那么 咖啡
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • C++ 模板可以提供 N 个给定类的公共父类吗?

    我正在寻找一个 C 模板 它可以找到一组给定类的共同父级 例如 class Animal class Mammal public Animal class Fish public Animal class Cat public Mammal
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • asp.net 视图状态加密

    我有几个关于何时以及如何在 ASP NET 3 5 中加密视图状态的问题 例如 如果我的 web config 中有一个机器密钥条目 例如 解密Key 自动生成 IsolateApps 验证 AES 解密 自动 gt 此时视图状态是否已加密
  • 值和类型的简洁双向静态 1:1 映射

    我将从我想象如何使用我想要创建的代码开始 它不必完全像这样 但它是我在标题中所说的 简洁 的一个很好的例子 就我而言 它是将类型映射到相关的枚举值 struct bar foo

随机推荐

  • 不使用 MFMailComposeViewController 发送电子邮件

    是否可以在iOS中发送电子邮件而不依赖于系统默认的邮件 消息传递接口 这与消息传递真的一样吗 您不能为消息创建自定义界面 而是使用 MFMessageComposerViewController 的默认界面 看看这个答案 锁定 MFMail
  • 如何读取 PHP 中的请求标头?

    我应该如何读取 PHP 中的任何标头 例如自定义标头 X Requested With IF 你只需要一个标题 而不是allheaders 最快的方法是
  • EaselJS 在鼠标悬停时更改颜色

    在笨手笨脚地在 HTML canvas 元素中实现了所有与鼠标和矢量相关的信息后 我切换到了 EaselJS 我已经习惯了 EaselJS 它真的很简洁 我特别喜欢这些容器以及它们使绘制嵌入形状变得多么简单 但是 我不知道你如何实现颜色变化
  • 运行时间较长但易于验证的算法?

    我正在设计一个网站进行实验 会有一个按钮供用户使用must点击并按住一段时间 然后松开 然后客户端向服务器提交AJAX事件 但是 为了防止自动点击机器人和快速垃圾邮件 我希望保持时间非常真实且不可跳过 例如做一些计算 重点是浪费实际的 CP
  • 子组件的 v-model 和子组件 Vue 内部的 v-model

    有没有办法简化这段代码 该按钮还应该更改子级的 localValue Vue component my input template div b My Input b br localValue localValue br div
  • 浮动溢出?

    下面的代码似乎总是产生错误的结果 我已经在 gcc 和 windows Visual Studio 上测试了它 是因为浮动溢出还是其他原因 提前致谢 include
  • c++11 成员函数从 unique_ptr 向量返回原始指针向量

    我开始使用 c 11 功能 并且我喜欢仅使用智能指针来拥有对象 这是我的课程 class MyClass public vector
  • Maven,配置具体目标

    我想配置 maven war plugin 的 爆炸 目标
  • 显示 Flex 上的文本右对齐

    我的代码如下 div div div div list name div br div div formatTime this state remainingTime days span language days span div div
  • C++11 随机数生成器的线程安全

    C 11 中有许多新的随机数生成器引擎和分布函数 它们线程安全吗 如果您在多个线程之间共享单个随机分布和引擎 是否安全并且您仍然会收到随机数吗 我正在寻找的场景是这样的 void foo std mt19937 64 engine stat
  • Xamarin 上自定义文件扩展名的意图过滤器实现

    我想在我的应用程序中打开带有自定义扩展名的文件 它可以来自电子邮件 下载 蓝牙等 每当用户点击这些文件时 我的应用程序就应该打开并执行一些任务 我需要 xamarin 平台的参考 帮助 我在这方面确实是新手 我的 Android 清单
  • SQLAlchemy 在事务中空闲

    我有用 Python 3 6 Flask 和 SQLAlchemy PostgreSQL 编写的应用程序 我遇到了悬挂问题idle in transaction我的数据库中的连接 这可能是因为我在选择查询后没有提交也没有回滚 我使用默认的
  • 使用 Java 访问 JSONArray 中项目的成员

    我刚刚开始在 java 中使用 json 我不确定如何访问 JSONArray 中的字符串值 例如 我的 json 如下所示 locations record id 8817 loc NEW YORK CITY id 2873 loc UN
  • EnumResourceNames 问题 - 未知错误

    我最近正在使用辅助库 二进制模块中的资源 并遇到了一个奇怪的错误 我有两个本机 WinAPI 参考 DllImport kernel32 dll SetLastError true public extern static bool Enu
  • Android Lollipop 问题 - 无法将图像从相机加载到 ImageView

    在 android lollipop 之前的任何版本上 下面的代码都可以正常工作 由于某种原因 从 Android 的某个版本 大约 5 0 开始 每当从相机捕获图像时 屏幕都会向右和向后旋转 90 度 不仅我的设备上的自动旋转关闭 我的活
  • Eclipse 插件:将 Launch 命令组添加到 Custom Perspective

    我在网上查找了很多教程 但很难找到与 Launches 相关的任何内容 我正在实现一个 IDE 插件 该插件实现了自定义透视图 但除了 运行最后一个工具 按钮之外 我看不到任何 运行 或 调试 工具栏按钮 每次启动透视图时 我都需要进入 自
  • 在 MEF 中组合零件后自动调用方法

    有没有办法指定在组成部分后自动调用方法 该方法可以在组合部分或进行组合的类中调用 是的 如果你的类实现了IPartImports满意通知 http msdn microsoft com en us library system compon
  • 有没有适用于 Android 的照片库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 由于Android中的内置照片库小部件不够好 很容易崩溃 我正在寻找第3方照片库库 如果您有好的选择请
  • 使用下拉菜单填充表单 - Access

    我正在尝试在访问中创建一个表单 该表单在顶部有一个下拉菜单 并将使用与所选内容相对应的记录填充表单的其余部分 我在网上查看了 2 个不同的指南 但都指向旧版本的 Access 我认为我遗漏了一些东西 所以 我做所有事情的顺序 我走到桌边拿表
  • Web Api 属性路由中的可选参数

    我想处理以下 API 调用的 POST v1 location deviceid appid 附加参数来自 Post Body 这一切对我来说都很好 现在我想通过允许 设备 id 和 或 应用程序 id 和 或正文数据为空来扩展我的代码 v