5

我正在为 falcon 框架实现 swagger 验证中间件。但是,不成功的请求存在问题。

如果在响应者中或什至在访问资源之前引发了 falcon HTTP 错误(例如,在 404 Not Found 的情况下),对于process_response中间件方法,响应仍然具有状态代码 200 和空主体。

我无法理解它是错误还是功能。

当我删除验证中间件时,一切都按预期工作。当有一个 swagger 验证中间件时,所有响应process_response都有状态码 200,包括不成功。

在 HTTP 404、401、400 等情况下,我想跳过响应的招摇验证/序列化。当响应出现时process_response,如果状态码为 200,我如何发现引发了错误?如何仅处理中间件中的成功响应?

另外,猎鹰在什么时候设置了正确的响应状态代码和正文?

蟒蛇3.5,猎鹰==1.0.0

任何帮助深表感谢。

UPD:最小的工作示例:

app.py

import falcon


class Validator:
    def process_resource(self, req, resp, resource, params):
        raise falcon.HTTPBadRequest("Too bad", "All requests are bad")

    def process_response(self, req, resp, resource):
        print(resp.status, resp.body)


class Resource:
    def on_get(self, req, resp):
        pass


application = falcon.API(middleware=[Validator()])
application.add_route('/test', Resource())

$ http http http://127.0.0.1:8000/test返回:

HTTP/1.1 400 Bad Request
Connection: close
Date: Tue, 28 Jun 2016 15:09:04 GMT
Server: gunicorn/19.6.0
content-length: 69
content-type: application/json; charset=UTF-8
vary: Accept

{
    "description": "All requests are bad",
    "title": "Too bad"
}

而网络应用程序打印200 OK None

4

0 回答 0