请考虑以下示例:
public class SomeBusinessLayerService : DataService<MyEntityContainer>
{
[WebInvoke]
void DoSomething(string someParam)
{
}
}
我找不到关于如何将参数传递给函数的示例或任何帮助! 使用WebClient(或使用fiddler进行goofinfg)我可以触发函数调用,但无论我尝试参数,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有大小限制和清理字符串的要求。
答案 0 :(得分:5)
在“错误请求 - 查询语法错误”响应的同时还拉了我的头发几个小时后,我终于通过传递URI中的参数来实现它。
特别注意字符串参数周围的引号:
WRONG:DoSomething?someParam = param CORRECT:DoSomething?someParam ='param'
答案 1 :(得分:1)
可能你应该尝试在带引号的URI中使用param(DoSomething?someParam ='param')。我试过这个并且它运行正常,在其他情况下我收到了和你一样的错误。
答案 2 :(得分:0)
我从未收到微软团队对该问题的回复,因此我找到了以下解决方法:
创建一个名为FunctionRequest的表,其中包含RequestID,Result和Paramerter string
要执行请求,我只需创建对象
如果我需要发送复杂对象 - 我使用DataContext序列化将其发送到服务器
现在所有的呼叫都记录在数据库中 - 这非常适合记录。
答案 3 :(得分:0)
要完成一点antscode response,您不仅要密切注意用引号围绕参数值......
但是!您还必须使用“guid”为Guid值添加前缀。像这样:
var y = ctx.Execute<bool>(new Uri("ReportExists?id=guid'" + Guid.NewGuid() + "'", UriKind.Relative));
答案 4 :(得分:0)
我遇到了类似的问题,我使用POST以x-www-form-urlencoded
标记的方式发送param1=value1¶m2=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...
}