原始类型(字符串)作为参数-通过ajax post的wcf方法不';t工作(小提琴手工作)
好的,这一个对于更了解这类事情的人来说应该很容易。我将限制我提供的代码的范围,因为这只适用于一种变体(fiddler) 这个问题很容易解释:我在WCF中有一个将字符串作为参数的方法。该方法需要具有包装正文样式的请求。如果我在fiddler中创建一个简单的对象并将其发送到上面,它就会工作。类似于{“提交”:“某物”}。如果我在JSON中通过ajax实现这一点,它将无法工作。我收到一个错误的请求错误,说这是不允许的。。。这是跨域的,但这不是问题所在,我在方法中添加了适当的头来处理这个问题。在这种情况下,永远不会调用该方法(这就像是签名的问题) 但事情是这样的。。。如果我用字符串的一个属性创建一个非常简单的类,并传入一个对象,它就可以正常工作。以包裹体样式传递对象效果良好。尝试使用“基元类型”(如字符串)执行此操作不会。。。有什么想法吗 这不起作用(但通过小提琴手起作用) 根据这份合同原始类型(字符串)作为参数-通过ajax post的wcf方法不';t工作(小提琴手工作),ajax,wcf,primitive,Ajax,Wcf,Primitive,好的,这一个对于更了解这类事情的人来说应该很容易。我将限制我提供的代码的范围,因为这只适用于一种变体(fiddler) 这个问题很容易解释:我在WCF中有一个将字符串作为参数的方法。该方法需要具有包装正文样式的请求。如果我在fiddler中创建一个简单的对象并将其发送到上面,它就会工作。类似于{“提交”:“某物”}。如果我在JSON中通过ajax实现这一点,它将无法工作。我收到一个错误的请求错误,说这是不允许的。。。这是跨域的,但这不是问题所在,我在方法中添加了适当的头来处理这个问题。在这种情况
[OperationContract]
[WebInvoke(Method = "*",
RequestFormat = WebMessageFormat.Json,
BodyStyle=WebMessageBodyStyle.WrappedRequest)]
string Reflect(String submission);
这确实有效
var spec = new Object();
spec.submission = "mysubmission";
var dataToSend3 = '{"thespecial":' + JSON.stringify(spec) + '}';
$.ajax({
type: "POST",
url: "http://localhost:8000/ServiceModelSamples/Service/rest/Reflecting",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: dataToSend3,
success: function (item) {
debugger;
alert(item);
},
error: function (xhr) {
debugger;
alert(xhr);
}
});
根据这份合同
[OperationContract]
[WebInvoke(Method = "*",
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string Reflecting(Special thespecial);
是的,如果不使用xml包装,就无法发送基本数据类型 启用端点行为帮助后,可以检查完整的请求结构 假设您有webHttpBinding的端点名称“api”,那么您可以使用以下命令启用帮助
< webHttp helpEnabled = "true " />
配置后,您可以看到以下帮助
http://localhost:<port>/test.svc/api/help
http://localhost:/test.svc/api/help
这将显示实际的请求格式
要传递字符串,可以使用以下格式包装器
<string xmlns="http://schemas.microsoft.com/2003/10/
Serialization/">Hello World</string>
你好,世界
也可以使用流输入参数
在这里实现流媒体功能感谢您的回复。但这不是XML。。。这是一个使用JSON的“POST”请求。我认为你说的不太合适。
<string xmlns="http://schemas.microsoft.com/2003/10/
Serialization/">Hello World</string>