【发布时间】:2015-06-17 22:18:46
【问题描述】:
我正在尝试使用 CORS 调用创建 WCF 服务,到目前为止,我的服务器具有此处指示的类:http://enable-cors.org/server_wcf.html
我能够使用不带任何参数的动词 GET 通过 jQuery ajax 调用进行调用,当我尝试将参数传递给我的请求时出现问题,这是我的代码:
界面标记:
[OperationContract]
[WebInvoke(Method = "*",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string GetData(TestClass value);
方法标记:
public string GetData(TestClass value)
{
return value.Id.ToString();
}
js 标记:
var value = {
Id : "2",
Name: "qwe"
};
$.ajax({
url: "http://localhost:38733/Service1.svc/GetData",
type: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify({ value: value }),
success: function(result) {
console.log(result);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR);
}
});
但是如果我调试,我总是得到 null,这意味着参数没有被传递给方法,我在 Chrome 控制台上也得到了POST http://localhost:38733/Service1.svc/GetData 400 (Bad Request)。
我做错了什么?
更新
Web.config 标记:
<behavior name="jsonBehavior">
<webHttp />
<crossOriginResourceSharingBehavior />
</behavior>
<extensions>
<behaviorExtensions>
<add name="crossOriginResourceSharingBehavior"
type="WCFSecureService.EnableCrossOriginResourceSharingBehavior, WCFSecureService, Version=1.0.0.0, Culture=neutral" />
</behaviorExtensions>
</extensions>
<services>
<service name="WCFSecureService.Service1">
<endpoint address=""
binding="webHttpBinding"
behaviorConfiguration="jsonBehavior"
contract="WCFSecureService.IService1" />
</service>
</services>
在 Google Chrome 控制台上,我得到以下信息:
OPTIONS http://localhost:38733/Service1.svc/GetData?value=5
更新
如果我向没有任何参数的方法发出请求,它会起作用
更新
Fiddler 2 正在向我展示这个,所以我不知道我做错了什么......
更新
TestClass 标记:
[DataContract]
public class TestClass
{
private int id;
private string name;
[DataMember]
public string Name
{
get { return name; }
set { name = value; }
}
[DataMember]
public int Id
{
get { return id; }
set { id = value; }
}
}
更新
如果我使用 JSON.stringify({ value: value }) 和 BodyStyle = WebMessageBodyStyle.Bare 我到达服务器,但我得到的所有属性都为 0,请查看下一张图片:
【问题讨论】:
-
尝试从数据中删除双引号 {"value":5}
-
只发布您的值,而不是 {value:value} 并显示您的 TestClass 的代码
-
@Strelok 我用
TestClass标记更新了我的问题。我刚刚使用了data: JSON.stringify({ value }),但仍然收到 400(错误请求) -
@user123456 你非常接近。只需
data: JSON.stringify(value) -
@user123456 并更改为 WebMessageBodyStyle.Bare。查看本教程:codeproject.com/Articles/722874/…
标签: javascript c# jquery ajax wcf