如何通过getJSON将多个变量传递给我的WebService?

时间:2012-07-03 22:24:14

标签: c# javascript jquery web-services rest

我想将大量变量传递给Web服务(大约60个),我想知道是否有更好的方法来实现这一点。目前,我正在使用GET并且能够通过URI传递参数(例如blahblah.com/People/{person_id}),虽然这对于传递ID非常有用,但是有很多变量它会看起来很像糟糕而且麻烦。我理解通过执行POST而不是它允许我传递我的许多变量而不需要创建一个巨大的URL并让WebService处理映射。我想这样做,但是只需在我的[WebInvoke(...)]注释中将我的Method值从GET更改为POST就会出现“不允许”类型的消息。我确信我有一些简单的东西,我很想知道。此外,如果我只是将所有变量打包到一个JSON对象中并将其作为getJSON的“data”参数传递,它会显示我的所有变量,但我无法从我的服务器端代码访问它们。

如果前面的内容没有让我的服务器端显而易见,我在Visual Studio 2008中使用C#作为我的RESTful Web服务,该服务的目标是.NET Framework 3.5。我相信应用程序是一个“Web服务”,因为实际代码存在于名为MyRestService.svc.cs的文件中。

对于我的客户端,我使用标准的HTML / CSS / JS / jQuery(我不是在客户端使用aspx)。要从服务器中提取,我使用$ .getJSON()函数。

请让我知道我遗漏哪些信息可以帮助您。

感谢您的关注,

jnsohnumr

2 个答案:

答案 0 :(得分:1)

更改[WebInvoke]注释会使您在服务器端正确,但您仍然告诉jQuery从浏览器执行GET。根据{{​​3}},$ .getJson是:

的简写
$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

所以你可以用$ .ajax调用替换$ .getJson调用,但是使用一个额外的参数来使它使用POST:

$.ajax({
  url: url,
  type: 'POST', // Use POST instead of GET
  dataType: 'json',
  data: data, // A javascript object with fifty variables on it.
  success: callback
});

PS - 如果您在Web请求中传递了50个变量,则表明您可能正在将请求用于其他位置(例如用户的会话)。您可能想重新考虑整个方法。

答案 1 :(得分:0)

对于GET请求,即使您将数据整齐地打包到客户端上的JS对象中,最终也会以file.php?var1=1&var2=2等方式发送。

这很好,除了:

  • 服务器有时会回复“URL太长”错误代码(我忘记了实际代码)
  • 浏览器对URL长度有自己的限制(IE,例如,是,或者至少是2083个字符)

还有GET的安全隐患,但如果你正在考虑GET,我猜你就是这样。

当然,POST可避免此类问题。最好的做法是让服务器接受POST,但我不知道这对你有多可行。

回到GET ......我不知道C#,但在PHP中有一个GET超全局,它将接收所有这些传入变量并将它们打包成一个关联数组。

$_GET; //array of incoming GET vars

如果C#中没有类似的东西,那么最好的办法是将其反序列化到服务器上的其他结构中。

希望这个漫步助手的任何一部分。