gpt4 book ai didi

javascript - 使用 WCF Rest 的错误跨域调用

转载 作者:行者123 更新时间:2023-11-29 21:46:45 27 4
gpt4 key购买 nike

我正在尝试使用 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,这意味着参数没有传递给方法,我也得到了 POST http://localhost:38733/Service1.svc/GetData 400 (Bad Request) 在 Chrome 控制台上。

我做错了什么?

UPDATE

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 控制台上,我得到以下信息:

选项 http://localhost:38733/Service1.svc/GetData?value=5

UPDATE

如果我向一个没有任何参数的方法发出请求,它会起作用

UPDATE

Fiddler 2 正在向我展示这个,所以我不知道我做错了什么......

request error

UPDATE

测试类标记:

[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; }
}
}

UPDATE

如果我使用 JSON.stringify({ value: value })BodyStyle = WebMessageBodyStyle.Bare 我到达了服务器,但是我得到的所有属性都是 0,请检查下一张图片:

error on debug

最佳答案

在您的服务契约(Contract)中,您可能希望放置一个可选的 WebGet 指令。

[WebGet(UriTemplate = "GetData/{value}")]
string GetData(int value);

要查找的另一件事是您在 web.config 中为您的 enpoint 定义了一个 json 行为。

<endpointBehaviors>
<behavior name="jsonBehavior">
<webHttp defaultOutgoingResponseFormat="Json"/>
</behavior>
<behavior name="xmlBehavior">
<webHttp defaultOutgoingResponseFormat="Xml"/>
</behavior>
</endpointBehaviors>

注意:如果你使用的是行为,那么你需要按照下面的方式指定格式

http://localhost:38733/Service1.svc/json/GetData/5

http://localhost:38733/Service1.svc/xml/GetData/5

另外,你能试试这个 js 吗:

var _data= {
value:5
};

$.ajax({
...
data: _data,
success: function(data) {
console.log(data);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR);
}
});

或者相反:

$.ajax({
url: "http://localhost:38733/Service1.svc/json/GetData/5",
});

关于javascript - 使用 WCF Rest 的错误跨域调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30903409/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com