我有一个 asp.net core web api,我可以从命令行开始(在 linux 主机上)
dotnet MyWebApi.dll
这将启动一些监听
localhost:5000
的网络服务器。 (默认)。假设我有一个
ValuesController
监听路径 /values/
.因此我可以从 http://localhost:5000/values/
获取我的值, 都好。我现在需要的是添加前缀
api
对于 api 中的所有本地路径,因此值 Controller 将响应:localhost:5000/api/values
.我找不到一种优雅的方法来做到这一点。
显然我可以在 Controller 的路由配置中更改它 - 但这是非常多余的并且需要大量更改,因为我们有很多 Controller ,我们使用
[Route(..)]
Controller 本身的属性。我见过
applicationUrl
属性(property)在launchsettings.json
我的 webapi 项目中的文件。显然它包含用于 Visual Studio 调试/启动的配置。在那里添加前缀(通过项目属性 > 调试)工作正常并且完全符合我的需要,但这仅适用于从 VisualStudio 启动它(即 dotnet run
)。在生产环境我只有dotnet publish
可用的工件 - launchsettings.json
文件没有复制到那里,似乎没有办法向 dotnet [assembly]
提供这样的文件。启动命令(就像 dotnet run)。为什么我需要这个的一些背景:
让 api Controller 监听
/
的模式来自 IIS,因为在站点的子文件夹中添加应用程序是很常见的,它处理路径前缀部分。我现在使用 docker 部署我的应用程序,并且 api 有自己的容器,它从上面的命令开始 - 因此缺少前缀,我需要以某种方式将它添加回来。
最佳答案
我在 Startup.cs
中找到了一个可以解决问题的解决方案我加了 UseBasePath
:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// ..
app.UsePathBase(new PathString("/api"));
app.UseMvc();
}
这允许从
localhost:5000/api/values
获取值和 localhost:5000/values
.我真的不需要或不喜欢这种歧义,但它现在解决了我的问题。
关于.net - 使用路径前缀在生产中运行 asp.net core 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51302033/