当前位置: 首页 > 知识库问答 >
问题:

服务器在预期405时用状态代码200响应

韩弘方
2023-03-14

我想知道为什么这里有200个状态码。我正在运行一个flask应用程序,当请求一个已处理的endpoint而不是一个已处理的方法时,会得到一个200状态代码作为响应。

这是最小的,可复制的代码。app.pyfile:

from flask import Flask, request, abort, jsonify
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Column, String, Integer

def create_app():
    db = SQLAlchemy()
    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "postgresql://postgres:postgres@localhost:5432/so_question"
    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
    db = SQLAlchemy()
    db.app = app
    db.init_app(app)
    db.create_all()

    class Book(db.Model):  
        __tablename__ = 'books'

        id = Column(Integer, primary_key=True)

        def __init__(self, id):
            self.id = id

        def format(self):
            return {
            'id': self.id,
            }

    @app.route('/books')
    def get_books():
        books = Book.query.order_by(Book.id).all()
        return jsonify({
            'books': [book.format() for book in books],
        })

    @app.route('/books/<int:book_id>', methods=["PATCH"])
    def update_title(book_id):
        return jsonify({
            'success': True
        })

    @app.errorhandler(405)
    def not_allowed(error):
        return jsonify({
            "success": False,
        })
    
    return app

然后我运行FLASK_APP=app.py烧瓶运行。我提出了以下请求:curl-X GEThttp://127.0.0.1:5000/books,结果如下:

{
  "books": [
    {
      "id": 1
    }, 
    {
      "id": 2
    }
  ]
}

但我不明白的是:我没有处理对/书籍的POST请求/

我很确定答案与这篇文章有关,但我想问的是为什么会发生这种情况,而不是如何修复,或者这个问题的最佳状态代码应该是什么。


共有1个答案

冯宪
2023-03-14

没有状态代码的返回将默认为code200

    def not_allowed(error):
        return jsonify({
            "success": False,
        })

此函数应返回所需的状态代码。

返回jsonify({“success”:False}),405

见先前回答的问题。

 类似资料:
  • 目前,我正在尝试使用Flux通过WebClient从服务器端获取消息。我想检查我是否可以处理非2xx HTTP状态情况的异常。在接收消息期间,我会停止服务器。在这种情况下,我希望通过我的自定义异常获得500个状态代码,但它会通过我的自定义异常返回200个状态代码。 您可以在下面找到输出日志(粗体部分很重要) 以下是客户端代码: 在这种情况下,我错过了什么?

  • 我正在使用 webClient 调用调用服务 1,该服务 1 调用服务 2,然后服务 2 从数据库中获取数据并返回它们。问题:我有 onStatus 来捕获错误的响应,因此响应具有 400 或 500 个状态代码。代码示例: 在一些边缘情况下,响应带有200个状态代码,响应体有失败消息和失败原因。那么我如何检索它,然后用该失败消息抛出异常(在其他服务返回的响应对象中)。因为它试图映射并抛出错误。目

  • 问题内容: 我有一台服务器,从同一URL返回HTTP状态代码200、201和202。在Chrome浏览器中,我已经通过“网络”调试面板确认了状态代码是否符合我的预期(即200、201或202)。我依靠该状态码来确定下一步。 我希望jQuery(1.5.2版)AJAX的回调请求设置为服务器发送的状态代码。但是,即使服务器发送的代码是201或202,状态代码也始终为200。 换句话说,无论服务器发送什

  • 问题内容: 我正在使用ionic框架和angularjs,我使用chrome来查看日志,但是在这里,我正在执行一个登录页面,我试图发布用户输入的数据来提供服务,但是却出现了此类错误。 而且这是 阅读一些博客后的下一个错误,我认为这是一个CORS扩展,从该扩展允许我尝试过ajax请求,但是我无法找到为什么会出现这两个错误。这是我的代码 https://plnkr.co/edit/Dz0aFsLqoQ

  • 我想将表单数据发送到服务器。我正在使用volly库来实现这一点,但下面的代码显示了以下错误。 意外响应代码405 com。Android截击服务器错误 我的代码是: **logcat看起来像这样**

  • Im在使用@RequestMapping(method=RequestMethod.Post)注释向controller类添加方法时遇到了一个问题。问题是我什么时候添加这个方法并启动应用程序。应用程序无法加载资源(css、JS等)。在浏览器上,我得到:无法加载资源:服务器以405(方法不允许)的状态响应,在运行日志上,我得到以下消息:org.springframework.web.servlet.