使用路径前缀

时间:2018-07-12 09:31:28

标签: .net asp.net-core .net-core dotnet-linux

我有一个 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有其自己的容器,该容器以上述命令开头-因此缺少前缀,我需要以某种方式将其重新添加。

1 个答案:

答案 0 :(得分:2)

我在添加Startup.cs的{​​{1}}中找到了解决问题的方法:

UseBasePath

这允许从 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // .. app.UsePathBase(new PathString("/api")); app.UseMvc(); } 中获取值。我真的不需要或不喜欢这种模棱两可的方法,但现在可以解决我的问题。