4

考虑以下示例:

public class SomeBusinessLayerService : DataService<MyEntityContainer>
{
 [WebInvoke]
 void DoSomething(string someParam)
 {
 }
}

我找不到关于如何将参数传递给函数的示例或任何帮助!使用 WebClient (或 goofinfg 与 fiddler 一起使用)我可以触发函数调用,但无论我尝试什么参数 someParam 始终为 null 更糟糕的是 - 如果我将类型更改为 int - 我所有的尝试都以以下错误结束:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <code></code>
  <message xml:lang="en-US">Bad Request - Error in query syntax.</message>
</error>

任何人都可以帮助我如何调用 POST 内容的工作示例吗?

注意:这是 DataService,而不是 WCF 服务。我可以让它与 WCF 服务使用相同的方法而没有任何问题。

编辑:我还需要 POST 示例而不是在 URI 中嵌入参数,因为 URI 有大小限制和清理字符串的要求。

4

5 回答 5

5

经过数小时的“错误请求 - 查询语法错误”响应拉扯我的头发后,我终于通过在 URI 中传递参数来让它工作。

特别注意字符串参数周围的引号:

错误:DoSomething?someParam=param 正确:DoSomething?someParam='param'

于 2009-05-10T07:46:15.083 回答
1

也许您应该尝试在 URI 中使用引号 (DoSomething?someParam='param') 来包含参数。我试过这个,它工作正常,在其他情况下我收到与你相同的错误。

于 2009-01-13T16:06:03.850 回答
0

我从未收到 Microsoft 团队对该问题的回复,因此我找到了以下解决方法:

使用 RequestID、Result 和参数字符串创建一个名为 FunctionRequest 的表
要执行请求,我只需创建对象。
如果我需要发送复杂对象 - 我使用 DataContext 序列化将其发送到服务器。
所有呼叫现在也记录在数据库中 - 这非常适合记录。

于 2009-01-09T21:34:55.560 回答
0

要完成一点antcode 响应,您不仅必须密切注意用引号括起来的参数值...

但!您还必须在 Guid 值前面加上“guid”。像这样:

var y = ctx.Execute<bool>(new Uri("ReportExists?id=guid'" + Guid.NewGuid() + "'", UriKind.Relative));
于 2009-10-15T11:17:33.060 回答
0

我遇到了类似的问题,我正在使用 POST 将x-www-form-urlencoded格式 ( ) 的表单参数发送到标记的方法,并且很难弄清楚如何获取参数。我最终通过以下方式实现了它:param1=value1&param2=value2...[WebInvoke]

[WebInvoke]
void DoSomething(Stream requestStream)
{
    StreamReader reader = new StreamReader(stream);
    var requestContent = reader.ReadToEnd();
    var parameters = HttpUtility.ParseQueryString(requestContent);
    var param1 = parameters["param1"];
    var param2 = parameters["param2"]; //and so on...
}
于 2010-08-20T14:46:10.973 回答