如何向/使用 RESTful WCF 服务传递和使用 JSON 参数?

2024-02-05

我是 RESTful 服务的初学者。

我需要创建一个接口,客户端需要在其中传递最多 9 个参数。

我更喜欢将参数作为 JSON 对象传递。

例如,如果我的 JSON 是:

'{
    "age":100,
    "name":"foo",
    "messages":["msg 1","msg 2","msg 3"],
    "favoriteColor" : "blue",
    "petName" : "Godzilla",
    "IQ" : "QuiteLow"
}'

如果我最终需要执行下面的服务器端方法:

public Person FindPerson(Peron lookUpPerson)
{
Person found = null;
// Implementation that finds the Person and sets 'found'
return found;
}

问题):
我应该如何使用上面的 JSON 字符串从客户端进行调用? 我如何创建 RESTful 服务方法的签名和实现

  • 接受这个 JSON,
  • 将其解析并反序列化为 Person 对象并
  • 调用/返回FindPerson方法的返回值给客户端?

如果要创建 WCF 操作来接收 JSON 输入,则需要定义映射到该输入的数据协定。有一些工具可以自动执行此操作,包括我不久前写的一个工具http://jsontodatacontract.azurewebsites.net/ http://jsontodatacontract.azurewebsites.net/(有关如何编写此工具的更多详细信息,请访问这篇博文 http://blogs.msdn.com/b/carlosfigueira/archive/2012/07/12/creating-asp-net-web-apis-on-azure-web-sites.aspx)。该工具生成了此类,您可以使用它:

// Type created for JSON at <<root>>
[System.Runtime.Serialization.DataContractAttribute()]
public partial class Person
{

    [System.Runtime.Serialization.DataMemberAttribute()]
    public int age;

    [System.Runtime.Serialization.DataMemberAttribute()]
    public string name;

    [System.Runtime.Serialization.DataMemberAttribute()]
    public string[] messages;

    [System.Runtime.Serialization.DataMemberAttribute()]
    public string favoriteColor;

    [System.Runtime.Serialization.DataMemberAttribute()]
    public string petName;

    [System.Runtime.Serialization.DataMemberAttribute()]
    public string IQ;
}

接下来,您需要定义一个操作合约来接收它。由于 JSON 需要放入请求正文中,因此最自然的 HTTP 方法是POST,因此您可以按如下方式定义操作:方法为“POST”,样式为“Bare”(这意味着您的 JSON 直接映射到参数)。请注意,您甚至可以省略Method and BodyStyle属性,因为"POST" and WebMessageBodyStyle.Bare分别是它们的默认值)。

[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
public Person FindPerson(Peron lookUpPerson)
{
    Person found = null;
    // Implementation that finds the Person and sets 'found'
    return found;
}

现在,在该方法中,您已将输入映射到lookupPerson。如何实现方法的逻辑取决于您。

评论后更新

下面是一个使用 JavaScript(通过 jQuery)调用服务的示例。

var input = '{
    "age":100,
    "name":"foo",
    "messages":["msg 1","msg 2","msg 3"],
    "favoriteColor" : "blue",
    "petName" : "Godzilla",
    "IQ" : "QuiteLow"
}';
var endpointAddress = "http://your.server.com/app/service.svc";
var url = endpointAddress + "/FindPerson";
$.ajax({
    type: 'POST',
    url: url,
    contentType: 'application/json',
    data: input,
    success: function(result) {
        alert(JSON.stringify(result));
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何向/使用 RESTful WCF 服务传递和使用 JSON 参数? 的相关文章

  • JetBrains Rider 针对 4.5 框架,无法切换到 4.7

    基本上 当尝试添加不支持旧框架的 NuGet 包时 会出现错误 但是在项目配置中只有 4 5 可用 在项目创建过程中 不存在选择目标的选项 有什么方法可以正确配置它吗 I haven t found out how to set up NE
  • Vue: vue-i18n: 无法翻译 keypath 的值,使用 keypath 的值作为默认值

    我正在使用 Vue 我想展示三种语言 英语 他加禄语和宿务语 现在我有错误 无法转换键路径 NavbarMobile home 的值 使用 keypath 的值作为默认值 我通过 console log this i18n locale 检
  • 何时使用 C++ 私有继承而不是组合?

    你能给我一个具体的例子吗 什么时候使用私有继承优于组合 就我个人而言 我将使用组合而不是私有继承 但在某些情况下 使用私有继承可能是特定问题的最佳解决方案 正在阅读C faq http www parashift com c faq lit
  • 如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?

    在我的 ASP NET Core 6 0 Web API 项目中配置了 CORS 但预检请求收到 http 405 错误 换句话说 不允许使用 HTTP OPTION 看起来 cors 没有启用 我见过的例子config EnableCor
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • AcceptSocket 超时?

    是否有可能AcceptSocket on a TcpListener具有超时的对象 以便它偶尔被中断 TcpListener server new TcpListener localIP port server Start while sh
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • Django Rest框架Json解析

    我想解析传入的POSTdjangoviews py 文件中的数据 发布数据 number 17386372 data banana apple grapes 这是我尝试读取上述传入数据的方法request views py class Fr
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 在 Windows 上使用 C/C++ 开发时省略 msvcr100.dll?

    是否可以在 Windows 上使用 C C 进行开发而不链接到 msvcr100 dll 我知道这是 Windows 的标准 c 库 但我想知道如果我没有安装 Visual Studio 或 Redistributable 软件包 我的计算
  • 使用联合对 IP 地址进行多种解释?

    在工作中 我们使用以下构造来将 IP 地址解释为 4 字节数组或 32 位整数 union IPv4 std uint32 t ip std uint8 t data 4 这很好用 但是读完这本书的第 97 章 不要使用联合来重新解释表示
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • 文本框中“结束编辑”的事件

    我正在 winform c 中使用文本框 并使用文本在数据库中进行查询 但每次文本更改时 我都需要不断查阅文本框的文本 因此 对于这些 我使用 KeyUp 但这个活动太慢了 文本框编辑完成后是否会触发任何事件 我考虑完成2个条件 控制失去焦
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • android中如何将字符串转换为unicode

    我正在解析一些unicodes from json to my android应用程序 API 给出unicodes像这样的图标 ue600 当我将这个unicode直接添加到textview like textview setText u
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 包含从代码隐藏 (ASP.NET C#) 到 ASPX 中的图像概述的图像列表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码

随机推荐

  • fgets() 返回 NULL 是否符合短缓冲区要求?

    在单元测试中 函数包含fgets 当缓冲区大小时遇到 意外结果n lt 2 显然这样的缓冲区大小是愚蠢的 但测试正在探索极端情况 简化代码 include
  • 如何测试iOS应用是否支持IPv6? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有 2015 年和 2014 年构建的应用程序 如何测试它们的 IPv6 性能 如果我的应用程序不支持 IPv6 我该怎么办 我的应用程序
  • Vitest错误“TypeError:无法读取未定义的属性(读取'resolve')”(router.resolve)

    我有一个非常基本的测试 但是当我尝试安装组件时它会抛出以下错误const wrapper mount HomeHeader 我已经粘贴了我的 vite 配置 测试 组件和包 这个错误发生时没有更新我的 vite 配置 但我继续更新了配置te
  • 为什么以 null 作为回调的 array_map() 创建一个“数组的数组”?

    今天我了解到一个特殊案例array map 在 PHP 中 文档中作为旁注提到了这一点 示例 4 创建数组的数组 上面的例子将输出 Array 0 gt Array 0 gt 1 1 gt one 2 gt
  • 如何在 Libgdx 中支持 OpenGL ES GL10、GL11 和 GL20?

    我正在编写一个使用 GL10 的 3d 游戏 但我希望该应用程序支持 GL11 或 GL20 如果可用 支持这三者的最佳设计是什么 或者这是一个愚蠢的差事 我应该只专注于支持一个版本 我当前的想法是将 render 函数拆分为 render
  • 故事板和笔尖兼容吗?

    我可以在我的所有应用程序中使用故事板 然后将其推送到一个笔尖 还是不可能同时使用这两个笔尖 故事板和 nib 可以在一个应用程序中一起使用 但如果您的部署目标低于 iOS 5 那么它将无法工作 故事板仅适用于 iOS 5 x 当然 您需要自
  • 启动另一个 Windows 应用商店应用程序

    当用户单击我的应用程序中的按钮时 是否可以启动不同的 Windows 应用商店应用程序 是的 您可以从您的应用程序启动其他 Windows 应用商店应用程序 例如 Bing 地图 地图应用程序支持协议激活 这意味着您可以使用特殊的 url
  • Apple 多个推送通知在通知托盘中不可见

    我基本上想在同一个应用程序中在 iOS 的通知托盘中显示多个推送通知 如果我的数据已打开 同时通过 APNS 触发推送通知 则此方案有效 但仅收到最新的数据 以防我离线并在一段时间后回来 此功能已得到 APNS 文档的确认 然而 这在 Wh
  • Laravel 如何使用另一台服务器作为文件存储

    我正在使用 Laravel 7 6 我在每台服务器中有两个 Laravel 项目 服务器是普通服务器 既不是 AWS 也不是 Digital Ocean 只是专用服务器 项目 1 位于服务器 1 中 项目 2 位于服务器 2 中 我的问题是
  • Servicereferences.clientconfig 更改值 silverlight

    我有一个 servicereference clientconfig 现在 我的安装团队正在为我的 silverlight 应用程序创建安装 这是一个问题 因为在 servicereference clientconfig 中有一组 Web
  • c# - 关闭浏览对话框导致表单关闭

    我有一个通过以下方式显示的表格 ShowDialog 表格没有CancelButton指定的 当我打开一个BrowseDialog从窗体中 然后关闭BrowseDialog 表格也被关闭 我怎样才能防止这种情况发生 单击 浏览 按钮时 br
  • 将 DTO 映射到域对象的最佳实践?

    我看到很多与映射相关的问题DTOs https en wikipedia org wiki Data transfer object到域对象 但我觉得他们没有回答我的问题 我以前使用过很多方法并有自己的意见 但我正在寻找更具体的方法 情况
  • PHP GET 请求,发送标头

    我需要执行获取请求并随之发送标头 我可以用什么来做到这一点 我需要设置的主要标头是浏览器标头 是否有捷径可寻 如果您使用 cURL 则可以使用curl setopt handle CURLOPT USERAGENT browser desc
  • Spring - 多种配置和@CompontentScan顺序

    我有多个Spring Configuration定义 bean 的类 我运行应用程序的主类有 SpringBootApplication scanBasePackageClasses BasePackage class 我的问题是 扫描这些
  • 什么是匹配不带子域的有效域名的正则表达式?

    我需要验证域名 谷歌网站 stackoverflow com 因此 一个最原始形式的域名 甚至不是像 www 这样的子域名 字符应该只是a z A Z 0 9 and period and dash 域名部分不应以破折号 开头或结尾 例如
  • 删除掩模图像中不需要的部分

    我使用 U2NET 成功计算了图像的掩模 如下所示 然而 正如我们所看到的 面具是not内部完全白色 并且在掩模外部 即左侧部分 也可以观察到一些不需要的伪影 我正在尝试使用膨胀和腐蚀操作来解决上述两个问题 但我认为这是错误的方法 因为它不
  • NHibernate 会话的生命周期应该是多长?

    我是 NHibernate 的新手 在过早关闭会话时遇到了一些问题 我通过重用会话而不是为每个事务打开一个会话来暂时解决了这个问题 然而 我的印象是 每次需要时打开会话是会话生命周期管理的推荐方法 不 所以 处理会话的推荐方法是什么 他们的
  • BSON |终端和非终端

    阅读通过BSON规范 http bsonspec org specification我遇到了terminal and 非终结符其中的条款 例如 有效的BSON数据由文档表示非终结符 以下基本类型用作终端在语法的其余部分 BSON 规范中的
  • 使用程序集版本控制属性的最佳方法是什么?

    The 汇编版本 http msdn microsoft com en us library system reflection assemblyversionattribute aspx and 程序集文件版本 http msdn mic
  • 如何向/使用 RESTful WCF 服务传递和使用 JSON 参数?

    我是 RESTful 服务的初学者 我需要创建一个接口 客户端需要在其中传递最多 9 个参数 我更喜欢将参数作为 JSON 对象传递 例如 如果我的 JSON 是 age 100 name foo messages msg 1 msg 2