fix: 禁用 redirect_slashes 修复 307 重定向导致前端新建失败
- FastAPI 初始化添加 redirect_slashes=False,避免反向代理后
307 重定向 URL 丢失 HTTPS 协议
- 移除 titles.py/voices.py/generation_tasks.py 路由中的尾斜杠
('/' → '','/tasks/' → '/tasks','/tasks/{id}/results/' → '/tasks/{id}/results')
Fixes: 前端调用 POST /api/v1/titles 等接口时 307 重定向到 http:// 导致失败
This commit is contained in:
@@ -79,7 +79,7 @@ def _ensure_library_has_ready_video_assets(assets) -> None:
|
||||
)
|
||||
|
||||
|
||||
@router.post("/tasks/", response_model=GenerationTaskResponse)
|
||||
@router.post("/tasks", response_model=GenerationTaskResponse)
|
||||
def create_generation_task(
|
||||
request: CreateGenerationTaskRequest,
|
||||
authenticated_user: AuthenticatedUser = Depends(get_current_user),
|
||||
@@ -130,7 +130,7 @@ def get_generation_task(
|
||||
return _to_generation_task_response(task)
|
||||
|
||||
|
||||
@router.get("/tasks/{task_id}/results/", response_model=ListGeneratedVideosResponse)
|
||||
@router.get("/tasks/{task_id}/results", response_model=ListGeneratedVideosResponse)
|
||||
def list_generation_results(
|
||||
task_id: str,
|
||||
authenticated_user: AuthenticatedUser = Depends(get_current_user),
|
||||
|
||||
@@ -57,7 +57,7 @@ def _get_user_plan(user_id: str, user_repository: UserRepository) -> str:
|
||||
return getattr(user, "subscription_plan", "free") or "free"
|
||||
|
||||
|
||||
@router.get("/", response_model=ListTitleLibraryResponse)
|
||||
@router.get("", response_model=ListTitleLibraryResponse)
|
||||
def list_titles(
|
||||
category: Optional[str] = Query(None),
|
||||
skip: int = Query(0, ge=0),
|
||||
@@ -89,7 +89,7 @@ def get_title(
|
||||
return _to_response(item)
|
||||
|
||||
|
||||
@router.post("/", response_model=TitleLibraryItemResponse, status_code=status.HTTP_201_CREATED)
|
||||
@router.post("", response_model=TitleLibraryItemResponse, status_code=status.HTTP_201_CREATED)
|
||||
def create_title(
|
||||
request: CreateTitleLibraryRequest,
|
||||
authenticated_user: AuthenticatedUser = Depends(get_current_user),
|
||||
|
||||
@@ -61,7 +61,7 @@ def _get_user_plan(user_id: str, user_repository: UserRepository) -> str:
|
||||
return getattr(user, "subscription_plan", "free") or "free"
|
||||
|
||||
|
||||
@router.get("/", response_model=ListVoiceLibraryResponse)
|
||||
@router.get("", response_model=ListVoiceLibraryResponse)
|
||||
def list_voices(
|
||||
status_filter: Optional[str] = Query(None, alias="status"),
|
||||
skip: int = Query(0, ge=0),
|
||||
@@ -93,7 +93,7 @@ def get_voice(
|
||||
return _to_response(item)
|
||||
|
||||
|
||||
@router.post("/", response_model=VoiceLibraryItemResponse, status_code=status.HTTP_201_CREATED)
|
||||
@router.post("", response_model=VoiceLibraryItemResponse, status_code=status.HTTP_201_CREATED)
|
||||
def create_voice(
|
||||
request: CreateVoiceLibraryRequest,
|
||||
authenticated_user: AuthenticatedUser = Depends(get_current_user),
|
||||
|
||||
@@ -24,6 +24,7 @@ app = FastAPI(
|
||||
version=settings.APP_VERSION,
|
||||
docs_url="/docs",
|
||||
redoc_url="/redoc",
|
||||
redirect_slashes=False,
|
||||
)
|
||||
|
||||
app.add_exception_handler(APIException, api_exception_handler)
|
||||
|
||||
Reference in New Issue
Block a user