2012-07-03 53 views
1

我想将大量变量传递给一个Web服务(大约60),我想知道是否有更好的方法来实现这一点。目前,我正在使用一个GET并且能够通过URI传递参数(例如blahblah.com/People/{person_id}),同时这对于传递一个ID很有效,它具有很多变量不好,而且很麻烦。我明白,通过执行POST,它可以让我传递许多变量,而无需创建巨大的URL,只需让WebService处理映射即可。我想这样做,但只是在我的[WebInvoke(...)]批注中将我的方法值从GET更改为POST后会出现“不允许”类型的消息。我敢肯定,有一些简单的我错过了,并希望得到一些见解。另外,如果我只是将所有变量打包到一个JSON对象中,并将其作为getJSON的“数据”参数传递,它将显示我所有的变量,但我没有任何方式从我的服务器端代码访问它们。如何通过getJSON将多个变量传递给我的WebService?

如果上述情况并未使我的服务器端显而易见,我在Visual Studio 2008中为我的RESTful Web服务使用了C#,该服务针对.NET Framework 3.5。我相信这个应用程序是一个“Web服务”,因为实际的代码位于一个名为MyRestService.svc.cs的文件中。

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

请让我知道我要离开的信息可以帮助你。

感谢您看,

jnsohnumr

+0

您所能做的就是使用POST。您只需让服务器接受POST即可使其工作。 – Pointy

+3

为什么不简单地将JSON对象反序列化为C#.NET对象?使用http://james.newtonking.com/projects/json-net.aspx这种类型的图书馆认为它没有那么困难 – renatoargh

+1

你真的**想要在单个调用中传递“约60个”参数吗? – lurkerbelow

回答

0

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

这是很好,除了:

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

还有GET的安全影响自己的极限,但如果你正在考虑GET无论如何,我猜你是对的。

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

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

$_GET; //array of incoming GET vars 

如果没有在C#中类似的东西,然后你最好的选择将是反序列化到服务器上其他一些结构。

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

+0

是的,我宁愿发布POST,只是不熟悉ASP WebServices而不是PHP,我同意这会让它变得很容易。 – jnsohnumr

1

更改[WebInvoke]注释会使您在服务器端正确设置,但您仍然告诉jQuery从浏览器执行GET操作。根据the docs,$。的getJSON是简写:

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

这样你就可以到$就调用替换您的$ .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请求中传递五十个变量,则表明您可能正在使用请求来处理其他位置(如用户会话)的某些内容。你可能想重新考虑你的整个方法。

+0

我想跟踪60个问题调查的答案,每个调查问卷获得1至5分。我愿意接受其他方面的意见。除了将其设置为POST之外,如何更改WebInvoke以使其工作?我需要对web.config进行任何更改吗? – jnsohnumr

+0

@jnsohnumr:我认为你不需要做其他任何事情来完成这项工作。为什么,即使在将客户端代码更改为使用AJAX POST后,您是否仍然收到错误?关于60个答案,您是否考虑过将问题分解成单独的页面,并允许用户在中途保存答案?没有什么比输入50个答案更烦人,然后发生了一些事情,所以你失去了他们。 – StriplingWarrior

相关问题