将复杂对象传递到 WCF Rest 服务

2024-06-19

我有一个接受复杂对象的操作合约,并且我通过 jQuery 调用该操作。如何使用 jQuery 传递像这样的复杂类型对象。以下是操作签名:

public Resolution CreateNewResolution(Resolution NewResolution);

我需要在客户端传递一个Resolution 对象,但我不知道如何执行类似使用jQuery 的操作。有什么帮助吗?

谢谢


See 丹尼的帖子 http://www.dennydotnet.com/post/Passing-a-JSON-object-to-a-WCF-service-with-jQuery.aspx首先,尽管我不同意他使用 GET 以及在查询字符串中传递 JSON 来获取复杂的参数。这看起来确实是错误的。


您使用的参数data是您的分辨率类型的 json 表示形式。例如,假设类型和操作在服务器端定义如下:

[DataContract( Namespace = "urn:brandon.michael.hunter/ws/2010/01", 
               Name = "Resolution" )]
public class Resolution
{
    [DataMember( IsRequired = true, Name = "Name" )]
    public string Name     { get; set; } 

    [DataMember( IsRequired = true, Name = "Rank" )]
    public int Rank { get; set; }

    [DataMember( IsRequired = true, Name = "SerialNumber" )]
    public int SerialNumber { get; set; } 

    [DataMember( IsRequired = false, Name = "Id" )]
    public int Id { get; set; } 
}

[OperationContract]
[WebInvoke(Method = "PUT",
           RequestFormat=WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "new")]
public Resolution CreateNewResolution(Resolution r)
{
    // your logic here
    r.Id = System.Guid.NewGuid();
    return r;
}

然后,在 Javascript 中,您使用的代码可能如下所示:

var resolution = {r: { Name : "Fred", Rank : 2,  SerialNumber : 17268 }};

// convert object to JSON string  (See http://jollytoad.googlepages.com/json.js)
var objectAsJson = $.toJSON(resolution);
// result is a string:  '{"Name":"Fred","Rank":"2","SerialNumber":"17268"}'

$.ajax({
  type        : "PUT",              // must match Method in WebInvoke
  contentType : "application/json",
  url         : "Service.svc/new",  // must match UriTemplate in WebInvoke
  data        : objectAsJson, 
  dataFilter  : function (data, type) {
      // convert from "\/Date(nnnn)\/" to "new Date(nnnn)"
      return data.replace(/"\\\/(Date\([0-9-]+\))\\\/"/gi, 'new $1');
  },
  processData : false,              // do not convert outbound data to string (already done)
  success     : function(msg){ ... },
  error       : function(xhr, textStatus, errorThrown){ ... } 
 });

Notes:

  • 您需要将变量 (r) 的名称作为正在传递的 JSON 中的第一个对象,至少对于 WCF 4 是这样。当我使用前面的示例时,直到我输入变量的名称后,它才起作用。变量在开头。
  • 要以 JSON 传递复杂对象,请使用 PUT 或 POST 作为请求的类型(HTTP 方法)
  • 您需要将复杂对象转换为 JSON 字符串。有一个不错的小 jquery 插件来做到这一点 http://jollytoad.googlepages.com/json.js. Denny http://www.dennydotnet.com/post/Passing-a-JSON-object-to-a-WCF-service-with-jQuery.aspx提供了他自己的实现。
  • 我发现如果我使用processData=true,那么发送到服务的结果字符串将采用查询字符串格式,而不是 JSON 格式。不是我想要传递复杂对象的。所以我把它设置为 false。对于执行 WebGet 的更简单的非 JSON 请求,使用 true 就可以了,并且所有参数都在查询字符串中。
  • dataFilter 允许正确反序列化 DateTime 对象
  • the msg传递给成功回调的参数包含返回的 json。
  • 您可能想要使用 URL 重写器来隐藏请求 URL 中的 .svc 标记
  • 在这种情况下,WCF 服务使用 webHttp 行为,而不是enableWebScript。后者动态生成 Javascript 代理来调用服务,但您提出问题的方式看起来您并不希望这样。

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

将复杂对象传递到 WCF Rest 服务 的相关文章

  • 将跨度值存储到 JavaScript 变量中

    我正在尝试编写 javascript 它将遍历一个跨度 获取其值 并将其存储在可用于执行算术的变量中 span class ServerData 30 span span class ServerData 6 span 关于以上两行 我的功
  • 计算 REST API 的 ETag

    我们正在构建我们使用的 REST APIETag https en wikipedia org wiki HTTP ETag有两种用途 通过允许客户端避免重新加载资源来节省带宽 对我们来说并不重要 解决并发问题 丢失更新问题 从实际角度来看
  • Rails 3 - 使用 Ajax 和 jquery 更新 div 内容(嵌套资源)

    我有两个简单的模型 Pin 和 Comment Comments 属于 Pin class Pin lt ActiveRecord Base has many comments dependent destroy and class Com
  • 如何显示带有排序下拉列表的页面?

    我有一个选择列表
  • 在 JQGrid 中创建链接

    我需要在 JQgrid 中创建一个列的所有单元格 一个链接 该链接使用单元格值调用 javascript 函数 以传递给服务器端的某些查询 我见过jqGrid 中的 html 链接列 https stackoverflow com ques
  • 使用 SignalR 检测“服务器离线”

    我们尝试在低带宽环境中使用 SignalR 在该环境中 与后端服务器的连接可以随机出现和消失 并且我们希望我们的 Web 应用程序能够做出适当的响应 看起来这个连接 API 在过去的一年里一直在变化 但根据最新的文档 我尝试连接 conne
  • WCF、Rest 和 SOAP 之间是什么关系?

    WCF和REST SOAP是什么关系 WCF 是基于其中一种技术 REST 或 SOAP 还是一种单独的技术 WCF 是一个用于构建分布式系统的消息传递框架 分布式系统是mostly只是网络服务的另一种说法 这意味着您可以用 C 或任何 N
  • 删除字段后重置 JavaScript 计数器

    我有一个 javascript 函数 可以添加带有计数器的输入字段 现在 当我删除其中一个字段时 它会被删除 但计数器仍在继续 JS 或 JQuery 有没有办法重置计数器并自动递增计数器 JS code function var scnt
  • DatePicker 上的日期验证器在 IE7/IE8 中触发漏报

    我对包含两个 jQuery UI DatePickers 的表单进行了一些基本验证 日期的格式为 yy mm dd 有一个required and date对两个 DatePicker 进行验证 这些在 Chrome 和 FF 中按预期工作
  • 阻止跨域调用 asp.net .asmx Web 服务

    我构建了一个应用程序 它使用 jQuery 和 JSON 来使用 ASP NET asmx Web 服务来执行增删改查操作 应用程序和 asmx 位于同一域中 我不介意人们远程消耗 asmx 的读取操作 但不希望人们随机删除内容 我可以将我
  • 跟踪已输出哪些 JSON 对象

    我通过将索引设置为 a 来随机输出 20 个左右的 JSON 对象randomNumber 最初是在页面加载时 我正在单独刷新已按 timeInterval 输出的每个 JSON 对象 为了跟踪已输出的 JSON 项目 我将每个项目的索引存
  • Highcharts 设置图例高度

    鉴于以下小提琴 http jsfiddle net JoelStransky 5QCmG 1 http jsfiddle net JoelStransky 5QCmG 1 我将如何设置图例高度 以便它不需要导航 该 API 没有legend
  • jqGrid 中的时间格式

    我正在尝试在 jqGrid 中设置时间格式 这是行不通的 我想在区域设置文件中使用预定义的格式化程序 这是 col 的定义方式 name Tid index Tid width 65 editable true formatoptions
  • 两种方式通信服务器/客户端架构?

    我试图找出我们的新应用程序使用哪种客户端 服务器技术 即 NET Framework 的哪一部分 我们将使用 NET 3 5 SP1 用 C 编写应用程序 它将由一个作为 服务器 运行的中央服务和分布在多台计算机上的多个客户端应用程序组成
  • Chrome扩展程序自定义光标

    我构建了一个 Google Chrome 扩展程序 在网站中放置一些 IMG 标签 hover 上的此 img 标记必须显示自定义光标 该扩展使用 jQuery 作为其注入的核心脚本 我尝试了以下方法 1 var cursor url ch
  • jqGrid 3.4 中的自定义数据工具提示

    我一直在使用优秀的 jqGrid 插件 它运行得很好 不过最近 我被要求为网格实现一些自定义工具提示 现在文档 http www secondpersonplural ca jqgriddocs index htm非常彻底 但它没有解决如何
  • 客户端与服务器端图像压缩[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在研究用户可以上传图片的东西 图像大小不受限制 现在我有两个选择使用PHP 服务器端 压缩图像或使用
  • Spring MVC @RequestBody 不适用于 jquery ajax?

    这是我的ajax请求 var dataModel name1 value1 name2 value2 ajax url testURL type POST async false contentType application json d
  • 检测 html 元素内的用户选择

    如何检测用户选择 用鼠标突出显示 是否在某个元素内 某个元素的子元素 Example div sdfsdf div some span content span div sdfsd div 伪代码 if window getSelectio
  • WCF CommunicationException 没有异常消息详细信息

    我从来不理解 WCF 的一件事是 当服务器遇到未处理的异常时 为什么没有异常消息详细信息传播回调用客户端 例如 如果我有以下服务器代码 ServiceBehavior IncludeExceptionDetailInFaults true

随机推荐