0

你好所有的好人。

我已经测试了我在互联网上可以找到的所有内容,但没有任何方法可以解决这个问题。我真的希望这里有人可以帮助我解决这个问题。

当我尝试从后端向我的烧瓶 API 发出“补丁”请求时,我收到此错误(GET、DELETE 和 PUT 工作正常):

访问从源“https://MYBACKEND-NOTREALURL.com”获取“https://MYAPI-NOTREALURL.com”已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:“访问” -Control-Allow-Origin' 标头包含多个值 'https://MYBACKEND-NOTREALURL.com, *',但只允许一个值。让服务器发送带有有效值的标头,或者,如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。

这就是我的 API 代码的编写方式:

from flask_cors import CORS, cross_origin
from flask import render_template, redirect, flash, request, url_for, jsonify, session, make_response
from flask_restful import Api, Resource, reqparse
import requests

app = Flask(__name__)
cors = CORS(app, resources={r"/*": {"origins": "*"}})
api = Api(app)

class ordersByID(Resource):
    def get(self,ID_ORDER):
        ****
        return jsonify(data)

    def patch(self,ID_ORDER):
        req321 = request.form
        result = updateOrder(req321,ID_ORDER)
        return result

    def delete(self,ID_ORDER):
        ****
        return result

    def put(self,ID_ORDER):
        ****
        return result
api.add_resource(ordersByID, "/orders/id/<string:ID_ORDER>")
if __name__ == '__main__':
app.run(debug=True)

我已经测试了我在互联网上可以找到的所有内容,但在尝试执行补丁请求时没有任何效果。我正在从弹出窗口获取补丁请求。

<form action="{{ **https://MYAPI-NOTREALURL.com** }}" id="popupForm" method="patch" onsubmit="formFetch(event,this,'patch')">

您可以在下面查看 javascript 代码。

function formFetch(e,form,method) {
  result = fetch(form.action, {method:method, body: new FormData(form)})
  .then(response => response.json())
  .then(data => document.getElementById('submitedFormConfirmationText').innerHTML = data['DB_Result']
  );
  e.preventDefault();
  document.getElementById('submitedFormConfirmation').style.display = 'inline';
};

我真的希望有人可以帮助我解决这个问题而无需重做整个代码?

4

1 回答 1

0

我设法解决了这个问题。

出于某种奇怪的原因,带有小写字母的“补丁”在本地工作,但在部署时它不起作用。

将方法从“patch”更改为“PATCH”解决了这个问题。

于 2022-01-06T22:07:29.563 回答