29 lines
890 B
Python
29 lines
890 B
Python
from fastapi import FastAPI, Request
|
|
from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
|
|
from starlette.responses import Response
|
|
|
|
|
|
class ApiResponseHeaderMiddleware(BaseHTTPMiddleware):
|
|
"""
|
|
接口响应头追加中间件
|
|
"""
|
|
|
|
async def dispatch(self, request: Request, call_next: RequestResponseEndpoint) -> Response:
|
|
"""
|
|
在响应返回前统一追加接口响应头
|
|
"""
|
|
response = await call_next(request)
|
|
api_response_headers = getattr(request.state, 'api_response_headers', None)
|
|
if api_response_headers:
|
|
response.headers.update(api_response_headers)
|
|
return response
|
|
|
|
|
|
def add_api_response_header_middleware(app: FastAPI) -> None:
|
|
"""
|
|
添加接口响应头追加中间件
|
|
|
|
:param app: FastAPI对象
|
|
"""
|
|
app.add_middleware(ApiResponseHeaderMiddleware)
|