1

目前,我在一些内部 IIS 站点的子目录下使用 Flask 运行了一个简单的 API。现在我认为使用 FastAPI 重写该 API 可能是一些想法。在 IIS 上运行 API 并不是一件难事,您必须web.config在 IIS 配置中创建一个等等。我知道这是使用 WSGI,但是否也有可能使用 ASGI(可能与 uvicorn 和 gunicorn 结合使用)?

重要的一件事是它必须在某个子目录下运行,调用它<iis_internal_company_server>/myapi。在 Flask 中,我包含了一个众所周知的前缀中间件,它可以按预期工作。我正在为 FastAPI 寻找类似的东西,这可以用app.include_router(router, prefix='/myapi')吗?

做了一些研究,但没有找到解决方案。也许你们中的一个人可能对此有一些经验。如果有,请分享。提前谢谢了。

问候,托马斯

4

2 回答 2

0

在我在 IIS 上部署的情况下,使用 wfastcgi.py

首先请安装a2wsgi

pip install a2wsgi

在 main.py

from fastapi import FastAPI
from a2wsgi import ASGIMiddleware

app = FastAPI()

@app.get("/")
def read_main():
 return {"message": "Hello World"}

wsgi_app = ASGIMiddleware(app)

在 web.config 中在 appSettings 中添加这个键

<add key="WSGI_HANDLER" value="main.wsgi_app" />
于 2022-02-15T12:21:55.163 回答
0

我的答案太长了,无法发表评论,但这不是一个确定的答案。

  1. 我不完全理解 WSGI/ASGI 的东西?您还想将 Flask api 与 Fastapi 一起运行吗?然后 Fastapi 可以做到。检查文档https://fastapi.tiangolo.com/advanced/wsgi/。特此报告示例
from fastapi import FastAPI
from fastapi.middleware.wsgi import WSGIMiddleware
from flask import Flask, escape, request

flask_app = Flask(__name__)

@flask_app.route("/")
def flask_main():
    name = request.args.get("name", "World")
    return f"Hello, {escape(name)} from Flask!"

app = FastAPI()

@app.get("/v2")
def read_main():
    return {"message": "Hello World"}

app.mount("/v1", WSGIMiddleware(flask_app))
  1. 子目录是什么意思?您可以将代码放在您想要的任何目录中,然后从那里运行它。相反,如果你想让两个应用程序在同一个 IP 地址上运行,据我所知,你唯一的机会是运行一个网关,它将/api以 Fastapi 服务器开头的请求转发到另一台服务器

根据评论编辑

  1. 如何修复 Apache WSGI 上的 FastAPI 应用程序错误?. 服务器需要与 ASGI 工作人员兼容。我不知道您正在运行哪个 Web 服务器,所以我无话可说。

  2. 这一点应该已经回答了你的问题,不是吗?

于 2020-12-14T21:02:19.977 回答