在 WCF 中,我的 UriTemplate 的文字段中可以有通配符吗?

2024-01-18

我正在使用 .Net 4.0 编写 RESTful WCF 服务。我想要以下两个网址:

/root/document/{ids}?fields={fields}
/root/externaldocument/{ids}?fields={fields}

映射到相同的接口成员:

Documents GetDocuments(string ids, string fields)

我尝试将通配符放入文字 URL 段中:

    [OperationContract]
    [WebGet(UriTemplate = "/root/*document/{ids}?fields={fields}")]
    Documents GetDocuments(string ids, string fields)

但是,这是无效的,我收到以下异常:

The UriTemplate '/root/*document/{ids}?fields={fields}' is not valid; the 
wildcard ('*') cannot appear in a variable name or literal... Note that a 
wildcard segment, either a literal or a variable, is valid only as the last 
path segment in the template

如果我将通配符段包装在模板大括号中:

    [OperationContract]
    [WebGet(UriTemplate = "/root/{*document}/{ids}?fields={fields}")]
    Documents GetDocuments(string ids, string fields)

然后我得到一个异常,因为方法参数中没有这样的输入参数:

Operation 'GetDocuments' in contract 'IAPIv2' has a UriTemplate that expects a 
parameter named 'DOCUMENTS', but there is no input parameter with that name 
on the operation.

我的解决方法就是有两个条目,指向不同的方法,然后让这些方法调用一个通用的实现:

    [OperationContract]
    [WebGet(UriTemplate = "/root/document/{ids}?fields={fields}")]
    Documents GetDocuments(string ids, string fields)

    [OperationContract]
    [WebGet(UriTemplate = "/root/externaldocument/{ids}?fields={fields}")]
     Documents GetExternalDocuments(string ids, string fields)

但这似乎有点丑陋。

我已阅读文档并找不到这一点的具体地址。有什么办法可以在 WCF 中拥有通配符文字段吗?或者这在 WCF 中是不可能的吗?


事实证明,这两个入口点需要具有稍微不同的功能。因此我需要捕获用于输入该方法的 URL。我最终做了以下事情:

[OperationContract]
[WebGet(UriTemplate = "/root/{source}ocuments/{ids}?fields={fields}")]
DocumentCollection GetDocumentsById(string source, string ids, string fields);

两个网址:

/root/document/{ids}?fields={fields}
/root/externaldocument/{ids}?fields={fields}

映射到相同的 URL 模板,因此我的界面中只需要一个带有单个 UriTemplate 的条目。

如果第二段是“documents”,则“source”输入参数捕获“d”;如果第二段是“externaldocuments”,则捕获“externald”。因此,通过检查此输入参数,该方法可以根据使用的 URL 做出适当的反应来达到方法。

请注意,我无法将以下内容用于 UriTemplate:

[WebGet(UriTemplate = "/root/{source}documents/{ids}?fields={fields}")]

因为在这种情况下,传入的 URL

/root/document/{ids}?fields={fields}

如果源输入参数使用空字符串 (""),则即使模板匹配,也不会与模板匹配。显然,UriTemplate 匹配算法要求参数捕获组中至少有一个字符才能匹配。

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

在 WCF 中,我的 UriTemplate 的文字段中可以有通配符吗? 的相关文章

随机推荐

  • Chef Solo 错误:找不到食谱

    海伊 我正在尝试在 Amazon EC2 Linux AMI 上使用 Chef Solo 运行 MongoDB 配方 我已经安装了 Omnibus 在 rb 文件中设置了说明书路径 并在 json 文件中设置了运行列表 我已将 mongod
  • python oauth 2.0新的fbsr facebook cookie,验证验证码时出错

    我正在尝试使用新的 fbsr appID cookie 我使用以下函数来解析它 但是当我随后尝试获取 access token 时 我收到 验证验证码时出错 消息 这些解析函数有问题吗 如果不是 可能是什么问题 更多信息 我设法使用 oau
  • 为什么我不能指定环境变量并在同一命令行中回显它?

    考虑这个片段 SOMEVAR AAA echo zzz SOMEVAR zzz zzz AAA zzz 这里我设置了 SOMEVAR to AAA在第一行 当我在第二行回显它时 我得到了AAA内容如预期 但是 如果我尝试在同一命令行上指定变
  • backbone.js 用 CoffeeScript 保存

    我在咖啡脚本中定义的主干视图上有以下方法 saveObservation gt self observation new Observation ParentUid questionUid Status N a Text Change to
  • 如何使用分布排序(基数排序等)对字符串进行排序?

    我知道如何使用基数排序对整数进行排序 但如何使用它来对字符串进行排序呢 或者浮点数 如果您忽略浮点数的一些特性 例如无穷大 非数字值和零的两种不同表示形式 则可以使用基数排序或任何其他分布排序对浮点数进行排序 IEEE 754 2008 h
  • 与 GCC 和 -lm 链接不会在 Ubuntu 上定义 ceil()

    我目前正在使用GCC编译 我需要使用
  • 哪个 paypal api 可以获取所有交易

    对大量 paypal API 感到非常困惑 我想知道我是否可以以某种方式获取交易 输入和输出 就像我通过网络界面导出到 csv 一样 我在这里 REST API https github com paypal PayPal Ruby SDK
  • 加载sequelize中关系为空的项目

    我是续集的新手 我正在尝试加载用户表中任务关系为空的所有条目 但它不起作用 这是我尝试过的 const express require express const app express const Sequelize require se
  • 从mysql的大表中快速选择随机行

    从大型 mysql 表中选择随机行的快速方法是什么 我正在使用 php 工作 但我对任何解决方案都感兴趣 即使它是另一种语言 获取所有 id 从中随机选择一个 然后检索整行 如果您知道 id 是连续的且没有漏洞 则可以获取最大值并计算随机
  • 如何阻止 Spring 吞咽异常?

    当服务器端出现故障时 因为数据库和应用程序不同步 而不是出现错误 并且应用程序崩溃 spring tomcat 似乎会吞下异常并假装什么也没发生 你可以说我疯了 但如果程序灾难性地失败 我希望它实际上灾难性地失败 有什么办法可以关闭这种行为
  • Pygame.MOUSEBUTTONDOWN 坐标关闭,除非我在 xwindows 中

    如果我从控制台加载 pygame 代码 它会错误地读取触摸屏坐标 但如果我启动到 xwindows 它会正确读取它们 我已经进入并校准了触摸屏 如果我从控制台运行 evtest 我将得到正确的坐标 只有在 python 中 它才会返回错误的
  • 监听EventDispatcher的所有事件类型

    在Flex中 是否可以监听一个对象的所有事件类型IEventDispatcher addEventListener的第一个参数是类型 它是一个字符串 在许多情况下 文档并不清楚它触发的事件类型 我想附加一个通用侦听器来检查事件 我认为你必须
  • 我可以在 ANDROID 中将 mp3 文件转换为文本吗?

    Android 是否支持以下功能 将包含语音的 mp3 文件转换为适当的单词 然后将结果写入 TextView 或 Toast 或其他任何内容 我不是在谈论使用语音识别器 我的意思是 mp3 中的文件必须从 SD 中选取 未实时记录和分析
  • 谷歌地图v3更改信息窗口的大小

    我想设置信息窗口的大小以适合其中的内容 标准信息窗口太宽我尝试使用 maxWidth 但它似乎不起作用 调整信息窗口大小的最佳方法是什么 参见代码 window setContent inspStates i name br total i
  • 如何在Javascript中为小数添加小数点

    我尝试将 0 10 添加到 23 50 但得到 23 50 10 而不是 23 60 my code console log parseFloat 23 50 parseFloat Math random 0 10 0 01 toFixed
  • Nativebase - 单击输入时如何显示日期选择器?

    我在用本地库成分 我有Form具有以下字段
  • 在 onTouch (Android) 上获取颜色(像素)信息

    有没有办法获取像素 x y 的颜色并检查其是否为红色 如果是红色则发送触摸事件 我希望它在后台运行 并且它应该始终检查该像素 x y 的颜色 一旦它变成红色 就应该模拟触摸事件 您可以从以下示例中获取值 final Bitmap bitma
  • 在 BigQuery 中附加时忽略重复记录

    我们正在将数据从 MySql 写入 BigQuery 我们设定了一些指标 例如 插入 如果是第一次添加记录 则在指示符字段中用 I 保存 更新 如果记录有一些更新的数据 则在 指示符 字段中将其保存为 U 如果未更改则忽略重复记录 但在 更
  • Winnovative - CSS 网格未正确转换

    我正在使用 Winnovative 库将一些 HTML 转换为 PDF 由于这对于很多场景都很有效 但 CSS 网格似乎存在问题 由于我无法分享太多规格 但我可以分享这些显示 HTML 部分和 PDF 中转换结果的图像 HTML eleme
  • 在 WCF 中,我的 UriTemplate 的文字段中可以有通配符吗?

    我正在使用 Net 4 0 编写 RESTful WCF 服务 我想要以下两个网址 root document ids fields fields root externaldocument ids fields fields 映射到相同的