飞行前响应失败,状态 405
Response from pre-flight failing with Status 405
首先我要说的是,在 Javascript/React 方面我有点新手。我正在尝试与我的 WCF 端点服务器通信,但我似乎无法在没有收到响应的情况下发送任何 POST 消息:
选项http://###/testbuyTicket 405(方法不允许)
似乎因为我发送的内容类型为 JSON,所以它需要“飞行前”,这就是它失败的地方。
这是我的客户端代码:
var headers = {
'headers': {
'Content-Type': 'application/json',
}
}
axios.post(call, data, headers).then(res => {
try {
if (res) {}
else {
console.log(res);
}
}
catch (err) {
console.log(err);
}
}).catch(function (error) {
console.log(error);
});
错误详情如下:
我不明白为什么这次预检失败了。在服务器上我已经允许了我认为我需要的一切:
{"Access-Control-Allow-Origin", "*"},
{"Access-Control-Request-Method", "POST,GET,PUT,DELETE,OPTIONS"},
{"Access-Control-Allow-Headers", "X-PINGOTHER,X-Requested-With,Accept,Content-Type"}
[ServiceContract]
public interface IPlatform
{
[OperationContract]
[WebInvoke(UriTemplate = "testbuyTicket")]
TicketResponse TestBuyTicket(PurchaseRequest purchaseRequest);
}
如有任何帮助,我们将不胜感激。我觉得我已经尝试了一切。提前致谢。
就像@charlietfl 所说的那样,这似乎不是 CORS 问题,因为您似乎返回 headers OK(根据屏幕截图)。
我的猜测是您的 Web 服务器(Apache 或其他)不允许 OPTIONS 请求 - 默认情况下许多只允许 GET/POST/HEAD。
可能是一个简单的网络服务器设置...
我找到了一个解决方案,我不确定它是否是最优雅的解决方案,但它确实有效。
基本上我有一个端点,调用也应该被定向,但它只接受 POST 请求,所以我添加了一个带有空方法的 OPTIONS 端点,它现在似乎都可以工作了。
所以我现在有:
[ServiceContract]
public interface IPlatform
{
[OperationContract]
[WebInvoke(UriTemplate = "testbuyTicket")]
TicketResponse TestBuyTicket(PurchaseRequest purchaseRequest);
[OperationContract]
[WebInvoke(UriTemplate = "testbuyTicket", Method = "OPTIONS")]
TicketResponse TestBuyTicketOptions(PurchaseRequest purchaseRequest);
}
这样做允许服务器响应 OPTIONS 调用,然后响应 POST 调用。
感谢大家的帮助。
感谢@demas 的想法,请参阅post 了解更多信息
首先我要说的是,在 Javascript/React 方面我有点新手。我正在尝试与我的 WCF 端点服务器通信,但我似乎无法在没有收到响应的情况下发送任何 POST 消息:
选项http://###/testbuyTicket 405(方法不允许)
似乎因为我发送的内容类型为 JSON,所以它需要“飞行前”,这就是它失败的地方。
这是我的客户端代码:
var headers = {
'headers': {
'Content-Type': 'application/json',
}
}
axios.post(call, data, headers).then(res => {
try {
if (res) {}
else {
console.log(res);
}
}
catch (err) {
console.log(err);
}
}).catch(function (error) {
console.log(error);
});
错误详情如下:
我不明白为什么这次预检失败了。在服务器上我已经允许了我认为我需要的一切:
{"Access-Control-Allow-Origin", "*"},
{"Access-Control-Request-Method", "POST,GET,PUT,DELETE,OPTIONS"},
{"Access-Control-Allow-Headers", "X-PINGOTHER,X-Requested-With,Accept,Content-Type"}
[ServiceContract]
public interface IPlatform
{
[OperationContract]
[WebInvoke(UriTemplate = "testbuyTicket")]
TicketResponse TestBuyTicket(PurchaseRequest purchaseRequest);
}
如有任何帮助,我们将不胜感激。我觉得我已经尝试了一切。提前致谢。
就像@charlietfl 所说的那样,这似乎不是 CORS 问题,因为您似乎返回 headers OK(根据屏幕截图)。
我的猜测是您的 Web 服务器(Apache 或其他)不允许 OPTIONS 请求 - 默认情况下许多只允许 GET/POST/HEAD。
可能是一个简单的网络服务器设置...
我找到了一个解决方案,我不确定它是否是最优雅的解决方案,但它确实有效。
基本上我有一个端点,调用也应该被定向,但它只接受 POST 请求,所以我添加了一个带有空方法的 OPTIONS 端点,它现在似乎都可以工作了。
所以我现在有:
[ServiceContract]
public interface IPlatform
{
[OperationContract]
[WebInvoke(UriTemplate = "testbuyTicket")]
TicketResponse TestBuyTicket(PurchaseRequest purchaseRequest);
[OperationContract]
[WebInvoke(UriTemplate = "testbuyTicket", Method = "OPTIONS")]
TicketResponse TestBuyTicketOptions(PurchaseRequest purchaseRequest);
}
这样做允许服务器响应 OPTIONS 调用,然后响应 POST 调用。
感谢大家的帮助。
感谢@demas 的想法,请参阅post