使用aiohttp创建含路径参数与查询字符串的GET端点遇405错误求助
问题分析与解决方案
错误原因
你当前的路由把type定义成了路径参数(URL路径里的{type}),但你期望的type是查询字符串参数(URL中?后的type=mini)。这导致实际请求的URL和路由规则不匹配,服务器找不到对应的GET处理逻辑,因此返回405错误。
修正步骤
1. 修改路由定义
将variation.py中的路由规则里的/{type}移除,正确的路由应该是:
# app/http/routes/v1/variation.py routes = [ get(f"/{version}/{path}/download/{{document_id}}", readvariationController.handle) ]
这样路由就匹配http://localhost:3099/v1/storage/download/112/这类路径,同时允许携带查询参数type。
2. 在控制器中获取查询参数
在readvariationController.handle方法里,通过request.query对象获取type的值:
async def handle(request): # 获取路径参数document_id document_id = request.match_info.get('document_id') # 获取查询参数type,可根据需求设置默认值 type_param = request.query.get('type', 'default') # 后续从数据库获取对应格式图片的逻辑 # ...
验证
修改后,请求http://localhost:3099/v1/storage/download/112/?type=mini就能正确匹配到GET端点,不会再返回405错误。
内容的提问来源于stack exchange,提问作者Plaoo
相关产品推荐
相关产品推荐

