使用查询字符串参数消除 UriTemplate 匹配的歧义

2024-03-04

我正在使用 WCF 4.0 创建 REST-ful Web 服务。我想做的是根据查询字符串参数调用不同的服务方法UriTemplate.

例如,我有一个 API,允许用户使用驾驶执照或社会安全号码作为密钥来检索有关人员的信息。在我的ServiceContract/接口我会定义两个方法:

[OperationContract]
[WebGet(UriTemplate = "people?driversLicense={driversLicense}")]
string GetPersonByLicense(string driversLicense);

[OperationContract]
[WebGet(UriTemplate = "people?ssn={ssn}")]
string GetPersonBySSN(string ssn);

但是,当我使用这两种方法调用我的服务时,出现以下异常:

UriTemplateTable 不支持具有多个模板 与模板 'people?ssn={ssn}' 等效的路径,但有不同 查询字符串,其中查询字符串不能全部通过以下方式消除歧义 文字值。有关更多信息,请参阅 UriTemplateTable 的文档 细节。

有没有办法做到这一点UriTemplates?这似乎是一个常见的场景。

非常感谢!


我也遇到了这个问题,最终想出了一个不同的解决方案。我不想为对象的每个属性使用不同的方法。

我所做的如下:

在服务合同中定义 URL 模板,不指定任何查询字符串参数:

[WebGet(UriTemplate = "/People?")]
[OperationContract]
List<Person> GetPersonByParams();

然后在实现中访问任何有效的查询字符串参数:

public List<Person> GetPersonByParms()
    {
        PersonParams options= null;

        if (WebOperationContext.Current != null)
        {
            options= new PersonParams();

            options.ssn= WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["ssn"];
            options.driversLicense = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["driversLicense"];
            options.YearOfBirth = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["YearOfBirth"];
        }

        return _repository.GetPersonByProperties(options);
    }

然后您可以使用 URL 进行搜索,例如

/PersonService.svc/People 
/PersonService.svc/People?ssn=5552
/PersonService.svc/People?ssn=5552&driversLicense=123456

它还使您能够混合和匹配查询字符串参数,因此只需使用您想要的参数并省略您不感兴趣的任何其他参数。它的优点是不限制您只能使用一个查询参数。

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

使用查询字符串参数消除 UriTemplate 匹配的歧义 的相关文章

  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 是否有与 C++11 emplace/emplace_back 函数类似的 C# 函数?

    从 C 11 开始 可以写类似的东西 include
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • 如何排列表格中的项目 - MVC3 视图 (Index.cshtml)

    我想使用 ASP NET MVC3 显示特定类型食品样本中存在的不同类型维生素的含量 如何在我的视图 Index cshtml 中显示它 an example 这些是我的代码 table tr th th foreach var m in
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • Eclipse 类文件元数据

    在 Visual Studio 中 我可以通过按 F12 GoToDefinition 获取没有源代码 即捆绑在 DLL 内 的类中公开的公共方法 成员的简洁列表 同样 我正在学习 Android API 在 Eclipse 中 跳转到 A
  • 如何构建弹性搜索查询以使文档字段中的每个标记都匹配?

    我需要确保字段的每个标记与用户搜索中的至少一个标记相匹配 这是为了简化起见的通用示例 Let Store Name Square Steakhouse 当用户搜索 Square 或 Steakhouse 时 构建与此文档匹配的查询很简单 此
  • 尽管需要使用语句和扩展,但无法进行函数调用

    所以我希望能够在运行时选择我的环境dotnet 一个 net core mvc 项目 从终端 我发现这个帖子 https stackoverflow com questions 37322565 dotnet run or dotnet w
  • Azure DevOps - 无法运行已安装的 dotnet 工具

    我试着跑dotnet tool install在 Azure DevOps 中并测试该工具 Locally dotnet tool install dotnetsay g dotnetsay test 无缝工作 在 Azure DevOps
  • 在R中将多边形转换为sf

    使用此处的教程 https www r spatial org r 2018 10 25 ggplot2 sf 2 html https www r spatial org r 2018 10 25 ggplot2 sf 2 html 在名
  • 对文件的操作 |获取和放置指针

    我对操作文件有一些疑问 a 我对 C 中的 get 和 put 指针有点困惑 我是否显示获取指针和放置指针的正确位置 MyFile seekg 0 ios beg MyFile seekp 10 ios end index 0 1 2 3
  • Firebase:数据库引用“on”方法未运行回调(javascript)

    我正在调整对可能不存在的数据的查询 在这种情况下 回调不会运行 据我从文档中了解到 它应该运行并且 snapshot val 应该为 null 不是吗 这里有一个精简的示例 http surfmaps eu trombone case ht
  • 有效地将 {坐标+值} 集绘制到(numpy 数组)位图

    假设我有一组像素值 例如 gt S 42 6 2 0 1 0 0 这里第 42 个条目是像素位置 6 2 呈暗红色 如何高效绘图S进入一个新的 numpy 位图数组bitmap np zeros 1024 768 3 是否有一些矢量化解决方
  • Crypto-Js 与 mcrypt 的输出不同

    我有一个 js 脚本 它加密 Blade 数据 如果我加密它 它会返回输出 JS 脚本结果 uqnOrevjCc2YCvY3uKNjzA 现在 以此答案作为比较的基础 我编写了或者更确切地说 在 PHP 中搜索了与我的 JS 脚本类似的等效
  • 如何运行烧瓶应用程序?

    我想知道启动烧瓶应用程序的正确方法 该文档显示了两个不同的命令 flask a sample run and python3 4 sample py 产生相同的结果并正确运行应用程序 两者之间有什么区别 应该使用哪一个来运行 Flask 应
  • AWS EventBridge 使用自定义详细信息安排事件?

    我正在尝试构建一个架构 其中使用多个参数集按计划触发单个 Lambda 因此 例如 如果我有三组参数并将计划设置为十分钟 我希望每十分钟执行三次 有没有办法使用自定义属性触发 EventBridge 计划事件 以便我可以将参数传递给 Lam
  • 数据表中要删除的排序箭头

    需要帮助删除数据表标题行上的排序箭头 升序和降序 然后当用户单击标题列时 将出现升序箭头 当然数据将按升序排序 MyDataTable dataTable aoColumns bSortable false null
  • R通过R_LIBS设置库路径

    我已阅读 R 常见问题解答和其他帖子 但我有点困惑 并且很高兴知道我所做的一切是否正确 在Windows中 为了修改默认的库文件夹 我创建了一个文件Renviron site并放入里面E Programs R 3 3 0 etc 该文件只有
  • 如何在 VBA for Ms Access 中擦除或重新加载 InkPicture 笔画?

    我想显示之前在 Ms Access 中的 inkPicture 对象上保存的笔画 它位于通过 ActiveX 的表单上 笔划作为 ole 对象保存在表中的 笔划 字段中 现在 执行一次就足够简单了 一行代码 我可以毫无问题地使用此代码片段
  • 计算 pyspark 中的分组中位数

    使用 pyspark 时 我希望能够计算分组值与其中值之间的差异 这可能吗 这是我编写的一些代码 它可以执行我想要的操作 除了它计算平均值的分组差异之外 另外 如果您愿意提供帮助 请随时评论我如何做得更好 from pyspark impo
  • web.config 转换在构建服务器上不起作用

    我们正在与 Team City 建立持续集成 在签到的基础上进行构建 这工作正常 但是它总是使用默认的 web config 构建 它不会随着开发环境特定的 Web 配置进行转换 在 Visual Studio 中 我为开发创建了自定义构建
  • std::remove_if 和 std::isspace - 编译时错误

    我有以下代码 include
  • Python 属性描述符设计:为什么要复制而不是变异?

    我正在研究Python如何实现属性描述符 https docs python org 2 howto descriptor html properties内部 根据文档property 是根据描述符协议实现的 为了方便起见 在此处复制它 c
  • Qt - webkit - 如何以编程方式登录

    我正在制作一个网络爬虫 因为我需要以编程方式登录我的电子邮件帐户 谁能说一下如何实现这一目标 我认为 QNetworkAccesManager 和它的 get 可以做到这一点 但是 我不太清楚 请有人阐明这个问题 注意 我使用的是 Qt 4
  • 使用查询字符串参数消除 UriTemplate 匹配的歧义

    我正在使用 WCF 4 0 创建 REST ful Web 服务 我想做的是根据查询字符串参数调用不同的服务方法UriTemplate 例如 我有一个 API 允许用户使用驾驶执照或社会安全号码作为密钥来检索有关人员的信息 在我的Servi