我想将大量变量传递给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
答案 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
等方式发送。
这很好,除了:
还有GET的安全隐患,但如果你正在考虑GET,我猜你就是这样。
当然,POST可避免此类问题。最好的做法是让服务器接受POST,但我不知道这对你有多可行。回到GET ......我不知道C#,但在PHP中有一个GET超全局,它将接收所有这些传入变量并将它们打包成一个关联数组。
$_GET; //array of incoming GET vars
如果C#中没有类似的东西,那么最好的办法是将其反序列化到服务器上的其他结构中。
希望这个漫步助手的任何一部分。