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