如何在路径中发送带有两个参数的 DELETE 请求?

How to send a DELETE request with two arguments in the path?

我正在尝试执行一个在路径中接收 2 个参数的 DELETE 请求。一份用于 mission_id,一份用于 virtual_obj_id。我的 client-side 开发人员尝试在 Google Chrome 上通过 React 使用此 API 调用,发现选项请求失败。我在 Postman 的 OPTIONS 请求中尝试相同的 URL 时重现了这个问题。

这是 API 调用:

(r'/mission/(.+)/virtual_obj/(.+)/$', VirtualObjectRemovalHandler),

我的请求处理程序知道如何处理请求:

class VirtualObjectRemovalHandler(MobileBaseHandler):

@tornado.gen.coroutine
def delete(self, mission_id, virtual_obj_id=None):
    //some code

我的 basehandler 定义 Options() 是这样的:

    def options(self, argument=None):
    # no body
    self.set_status(204)
    self.finish()

预检因声明参数过多而失败。像这样:

TypeError: options() takes from 1 to 2 positional arguments but 3 were given ERROR:tornado.access:500 OPTIONS /mission/f6a5fba0-7c7d-11e9-8123-e9c9137fe017/virtual_obj/kjvsslbj/

我正在使用 tornado 4.5.3 和 python 3.6.3.
在本地主机上测试时,显然一切正常。造成问题的只是 CORS 预检。我还允许服务器上的 headers:

    def set_default_headers(self):
    print ("setting headers!!!")
    self.set_header("Access-Control-Allow-Origin", "*")
    self.set_header("Access-Control-Allow-Headers", "*")
    self.set_header('Access-Control-Allow-Methods', 'POST, GET, 
    OPTIONS, DELETE')

我试过查看他们的 documentation 但那里没有任何线索。 如果必须的话,我可以添加 JSON body,但我的目标是尽可能精简请求。 tornado 是否根本不允许在请求路径中使用多个参数?

我做错了什么?

这是有问题的:

def options(self, argument=None):
    ...

您想接受任意数量的参数。在这种情况下,您将不得不使用 * 语法。

def options(self, *args):
    ...

请参阅此讨论以获得一些解释:What does ** (double star/asterisk) and * (star/asterisk) do for parameters?