我有一个 asp.net core Web api,可以从命令行(在Linux主机上)启动
dotnet MyWebApi.dll
这将启动一些网络服务器,该服务器在localhost:5000
上监听(默认情况下)。
假设我有一个ValuesController
侦听路径/values/
。因此,我可以从http://localhost:5000/values/
中获得自己的价值观,一切都很好。
我现在需要为api中的所有本地路径添加前缀api
,因此值控制器将响应:localhost:5000/api/values
。
我找不到执行此操作的优雅方法。
显然,我可以在控制器的路由配置中进行更改-但这是非常多余的,并且需要进行大量更改,因为我们有很多控制器,并且我们在控制器本身上使用了[Route(..)]
属性。
我在我的webapi项目的applicationUrl
文件中看到了launchsettings.json
属性。显然,它包含用于Visual Studio调试/启动的配置。在其中添加前缀(通过项目属性>调试)可以正常工作,并且完全可以满足我的需要,但这仅适用于从Visual Studio(即dotnet run
)启动它。在生产环境中,我只有dotnet publish
个工件可用-launchsettings.json
文件未复制到那里,并且似乎没有办法向dotnet [assembly]
启动命令提供这样的文件(例如dotnet运行)。
我为什么需要这个背景:
让api控制器监听/
的模式来自IIS,因为在站点的子文件夹中添加应用程序是很常见的,它处理路径前缀部分。现在,我使用docker部署我的应用程序,并且api有其自己的容器,该容器以上述命令开头-因此缺少前缀,我需要以某种方式将其重新添加。
答案 0 :(得分:2)
我在添加Startup.cs
的{{1}}中找到了解决问题的方法:
UseBasePath
这允许从 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// ..
app.UsePathBase(new PathString("/api"));
app.UseMvc();
}
和 中获取值。我真的不需要或不喜欢这种模棱两可的方法,但现在可以解决我的问题。