【问题标题】:Response from pre-flight failing with Status 405飞行前响应失败,状态为 405
【发布时间】:2018-07-05 01:49:29
【问题描述】:

首先我会说我在 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);
}

任何帮助将不胜感激。我觉得我什么都试过了。非常感谢。

【问题讨论】:

  • 'headers': { 'Content-Type': 'application/json'}headers 中的用途是什么?
  • 似乎您的服务器没有处理作为 CORS 预检的 OPTIONS 请求,并告诉您不允许使用 OPTIONS
  • @guest271314 我补充说以确认我正在以 JSON 格式发送数据,而不是发送响应以抱怨数据为 RAW 格式。我添加的一些东西比任何东西都更有希望
  • 为什么要创建一个headers 对象,然后包含一个嵌套的headers 对象?
  • 但这仅在 CORS 标头中。可能是服务器端路由问题。检查实际的 OPTIONS 请求,可能看不到其中的访问控制标头

标签: javascript reactjs wcf cors axios


【解决方案1】:

我找到了一个解决方案,我不确定它是否是最优雅的解决方案,但它确实有效。

基本上我也有一个调用应该被定向的端点,但它只接受 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 大喊大叫,了解更多信息,请参阅帖子Response for preflight has invalid HTTP status code 405

【讨论】:

    【解决方案2】:

    就像@charlietfl 所说,这似乎不是 CORS 问题,因为您似乎可以返回标题(根据屏幕截图)。

    我的猜测是您的网络服务器(Apache 或其他)不允许 OPTIONS 请求 - 许多默认情况下只允许 GET/POST/HEAD。

    可能是一个简单的网络服务器设置...

    【讨论】:

    • 但是你是对的,服务没有接受 OPTIONS 请求
    猜你喜欢
    • 2021-08-26
    • 2018-12-16
    • 1970-01-01
    • 2020-11-25
    • 2018-06-18
    • 1970-01-01
    • 2014-12-01
    相关资源
    最近更新 更多