【问题标题】:Content-Type request header error handling not returning correctlyContent-Type 请求标头错误处理未正确返回
【发布时间】:2022-01-24 03:29:09
【问题描述】:

我创建了一个 Flask 错误处理程序,如果 Content-Type 不是 application/json,它将返回 415。但是,即使我在 Postman 工具中选择了不正确的 Content-Type,当它应该返回错误消息时,我仍然会收到 200 响应。可能是什么问题?

这是我在 app.py 中的代码

from flask import Flask, make_response, jsonify, request

app = Flask(__name__)

@app.errorhandler(415)
def unsupported_media(error):
    content_type = request.content_type('Content-Type')
    if 'Content-Type' in request.headers and content_type != 'application/json':
        return make_response(jsonify(error = 'Content-Type is required to be application/json'), 415)

我还在邮递员中设置了错误的 Content-Type 值

更新: 我尝试了这段代码,它奏效了。但是,我不确定这是否是正确的实现。我还应该使用 app.errorhandler() 吗?

@app.before_request 
def unsupported_media():
if not request.is_json: 
     return jsonify(Error = 'Content-Type is required to be application/json'), 415

【问题讨论】:

  • 也尝试添加else 语句。

标签: python flask


【解决方案1】:

更新:

errorhandler 用于处理error,例如,HTTPException 来自werkzug。 您可以在 before_request 处理程序中做出响应,而无需处理 415 exception


errorhandler注册一个函数,通过代码或异常类来处理错误。

也许before_request 是你需要的。

from flask import Flask, request, abort


app = Flask(__name__)

# This will register the validate function to all the endpoint
@app.before_request
def _is_json():
    if not request.is_json:
        abort(415, 'Content-Type is required to be application/json')

@app.errorhandler(415)
def unsupported_media(error):
    return {'error': error.description}

"""
YOUR router view functions or classes
"""

【讨论】:

  • 这是一个安全的实现吗?如果没有,你能帮我改进这段代码吗@app.before_request def unsupported_media(): if not request.is_json: return jsonify(Error = 'Content-Type is required to be application/json'), 415
  • 你应该更具体。我不明白您所说的“安全实施”是什么意思。而且您发布的代码不可读。您可以编辑您的问题并更详细地描述它。
  • 我更新了我的帖子,您可以查看我最近的更改。谢谢!
  • 我已经更新了我的帖子来回答你的问题。
  • 我怎样才能重用您发布的其他错误代码的代码,例如400, 404?或者我应该复制你为其他错误代码发布的方法
猜你喜欢
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
相关资源
最近更新 更多