You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask-RESTful无法解析text/plain类型的Microsoft Graph订阅验证请求

解决Flask-RESTful接受text/plain请求的问题

问题根源

Flask-RESTful默认仅自动解析application/json类型的请求体,当收到text/plain类型的请求时,会跳过JSON解析并抛出你遇到的错误。而Microsoft Graph的订阅验证、通知请求使用text/plain作为Content-Type,导致解析失败。

之前操作的误区

  1. flask-accept的@accept装饰器无效:这个装饰器用于声明接口支持的响应格式(匹配客户端的Accept请求头),和请求的Content-Type无关,无法解决请求体解析问题。
  2. @api.representation无效:这个装饰器用于注册响应的序列化逻辑(将返回数据转换为指定格式),同样和请求体的解析没有关系。

正确解决方案

方案1:手动处理请求数据(推荐)

直接绕过Flask-RESTful的自动解析逻辑,手动获取请求数据,同时区分验证请求和通知请求:

from flask import request, Response
from flask_restful import Resource
import json

class ValidateSubscription(Resource):
    def post(self):
        # 处理订阅验证请求:validationToken在URL查询参数中
        validation_token = request.args.get("validationToken")
        if validation_token:
            return Response(validation_token, status=200, mimetype='text/plain')
        
        # 处理通知请求:请求体是text/plain格式的JSON数组
        raw_notification = request.get_data(as_text=True)
        notifications = json.loads(raw_notification)
        
        # 在这里添加你的通知处理逻辑
        print("收到通知:", notifications)
        
        return {"status": "processed"}, 202

方案2:全局修改Flask-RESTful的请求解析规则

如果需要让多个接口都支持text/plain请求,可以修改默认解析器,添加text/plain的解析逻辑:

from flask import request
from flask_restful import reqparse, Resource
import json

# 创建自定义解析器,支持text/plain类型的请求体
parser = reqparse.RequestParser()
# 注册text/plain的解析逻辑
@parser.location_handler('text_plain')
def parse_text_plain():
    return request.get_data(as_text=True)

class ValidateSubscription(Resource):
    def post(self):
        args = parser.parse_args()
        # 处理验证请求
        validation_token = request.args.get("validationToken")
        if validation_token:
            return Response(validation_token, status=200, mimetype='text/plain')
        
        # 处理通知请求
        raw_data = args.get('text_plain') or request.get_data(as_text=True)
        notifications = json.loads(raw_data)
        # 处理逻辑
        return {"status": "success"}, 202

内容的提问来源于stack exchange,提问作者SLDem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:58:10