1

我想将大量变量传递给 Web 服务(大约 60 个),并且我想知道是否有更好的方法来实现这一点。目前,我正在使用 GET 并且能够通过 URI 传递参数(例如 blahblah.com/People/{person_id} ),虽然这对于传递 ID 之类的东西非常有用,但它看起来有很多变量不好,很麻烦。我知道通过 POST 代替它可以让我传递我的许多变量,而无需创建一个巨大的 URL 并让 WebService 处理映射。我想这样做,但是只是在我的 [WebInvoke(...)] 注释中将我的 Method 值从 GET 更改为 POST 就会出现“不允许”类型的消息。我敢肯定,我缺少一些简单的东西,并且很想获得一些见解。还,

如果前面的内容对我的服务器端不明显,我在 Visual Studio 2008 中将 C# 用于面向 .NET Framework 3.5 的 RESTful Web 服务。我相信该应用程序是一个“Web 服务”,因为实际代码位于一个名为 MyRestService.svc.cs 的文件中。

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

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

感谢您的关注,

jnsohnumr

4

2 回答 2

1

更改[WebInvoke]注释将在服务器端设置您,但您仍然告诉 jQuery 从浏览器执行 GET。根据docs, $.getJson 是以下的简写:

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

因此,您可以将 $.getJson 调用替换为对 $.ajax 的调用,但使用附加参数使其使用 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——如果你在一个网络请求中传递了五十个变量,这表明你可能正在将请求用于属于其他地方的东西(比如用户的会话)。您可能需要重新考虑您的整个方法。

于 2012-07-03T22:41:05.887 回答
0

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

这很好,除了:

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

GET 还存在安全隐患,但如果您正在考虑 GET,我猜您已经了解了。

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

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

$_GET; //array of incoming GET vars

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

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

于 2012-07-03T22:35:16.903 回答