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

如何在没有正文的情况下发表文章

陶胤
2023-03-14

我想使用POST动词在带有flask restplus的VM上执行操作,但当没有主体时,它总是导致400。

VM_ACTION_FIELDS = {
      'vmActionId': fields.Integer(required=True, description='The vmActionId of the VmAction'),
      'vmId': fields.Integer(required=True, description='The vmId of the VmAction'),
      'status': fields.String(required=True, description='The status of the VmAction',
                              enum=['NEW', 'REQUESTED', 'IN_PROGRESS', 'ERROR', 'COMPLETED']),
      'actionType': fields.String(required=True, description='The actionType of the VmAction',
                                  enum=['STOP', 'RESTART']),
      'createdAt': fields.DateTime(required=True,
                                   description='The createdAt datetime of the VmAction'),
      'completedAt': fields.DateTime(required=True,
                                     description='The completedAt datetime of the VmAction'),
  }
  VM_ACTION_MODEL = api.model('VmAction', VM_ACTION_FIELDS)

  [snip]

      @vms_ns.route('/<int:vmId>/stop', endpoint='vmStop')
      class VmStopView(Resource):
          """
          Stop a VM
          """
          @api.marshal_with(VM_ACTION_MODEL, code=202)
          @api.doc(id='stopVm', description='Stop a Vm')
          def post(self, vmId):
              # do stuff 
              return vmAction, 202

结果是400{“消息”:“浏览器(或代理)发送了一个此服务器无法理解的请求。”

如果我只是简单地从post转换为get,它就可以正常工作。但是,我真的想使用POST动词,因为这是我需要遵循的标准动词,用于自定义非CRUD操作。我有没有用flask restplus把自己画到角落里?

注意:对于需要身体的操作,它工作正常。它唯一的无体烧瓶Rest后操作,空体上有400个错误。

共有2个答案

长孙燕七
2023-03-14

这里有一个变通方法,可以让我一直坚持到找到另一个解决方案为止:

@app.before_request
  def before_request():
      """This is a workaround to the bug described at
      https://github.com/noirbizarre/flask-restplus/issues/84"""
      ctlen = int(request.headers.environ.get('CONTENT_LENGTH', 0))
      if ctlen == 0:
          request.headers.environ['CONTENT_TYPE'] = None
雍骏俊
2023-03-14

如果您将内容类型设置为application/json,我认为您的body至少应该是{}。如果您想要提交一个空的负载,只需删除content-type头。

我认为这正是这个问题(我正试图弄清楚):https://github.com/noirbizarre/flask-restplus/issues/84

 类似资料:
  • 问题内容: 我怎么能包括为没有MANIFEST.in文件? 我的setup.py看起来像这样: 版本: 我就是无法加入。 还是此博客文章仍然正确? http://blog.codekills.net/2011/07/15/lies,-more-lies-and-python-packaging- documentation-on– package_data-/ 不过,在过去的一个小时中,我了解到这

  • 问题内容: 我正在尝试附加在没有日志文件的SQL Server Management Studio中。 我得到下面的错误。任何想法如何做到这一点? 执行Transact-SQL语句或批处理时发生异常。 (Microsoft.SqlServer.ConnectionInfo) 无法打开物理文件“ C:\ sql_logs \ YAFnet_log.ldf”。 操作系统错误2:“ 2(系统找不到指定的

  • 问题内容: 我试图将配置(例如URLs / etc)放入资源文件夹中,以供实用程序类使用。但是,我不想从任何地方的活动中传递上下文。我希望能够通过路径名(似乎使用assess /是为此用途设计的)来访问资源,而无需使用上下文来访问资源。 在这种特殊情况下,我希望单例实例化时在配置中使用某些东西。除了实例化期间的那一次之外,它不需要任何资源。因此,每次调用getInstance()时都必须传递Con

  • 所以我制作了一个脚本,读取一堆文本文件(每首歌一个)作为歌词。它的工作原理是你输入一个歌词短语,然后脚本扫描所有可用文件中的歌词,并告诉你歌曲的名称。问题是斜杠不起作用。我更改了“/”和“\”之间的斜杠,但遇到了错误。 当我使用正斜杠时,我看到以下内容: “OSError:[Errno 22]无效参数:'C:/Users/[My Name]/Desktop/MusicLyricSearch/All

  • 问题内容: 我正在用JavaScript编写一些代码。在这段代码中,我想读取一个json文件。该文件将从URL加载。 如何在JavaScript的对象中获取此JSON文件的包含? 例如,这是我的JSON文件,位于: 我想像这样在我的文件中使用它: 问题答案: 这是一个不需要jQuery的示例: 称呼为:

  • 我正在使用Cucumber for BDD、JUnit和Selenium构建一个自动化框架,我们在云中有一个testrail实例用于测试管理,我实现了testrail API以从那里获取所有测试用例,问题是我无法运行这些步骤获取测试用例,因为总是验证第一个功能文件是否存在。 我尝试过结果总是一样的: 在[classpath:features] 0场景0步骤0m0.019s中找不到功能 这是启动该过