4

我有一个asp.net core web api,我可以从命令行开始(在 linux 主机上)

dotnet MyWebApi.dll

这将启动一些监听的网络服务器localhost:5000(默认情况下)。假设我有一个ValuesController监听路径/values/。因此,我可以从中获得我的价值观http://localhost:5000/values/,一切都很好。

我现在需要的是为apiapi 中的所有本地路径添加一个前缀,因此值控制器将响应: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 有自己的容器,它从上面的命令开始 - 因此缺少前缀,我需要以某种方式将其添加回来。

4

1 回答 1

8

我找到了一个解决方案,Startup.cs我补充说UseBasePath

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // .. 

        app.UsePathBase(new PathString("/api"));
        app.UseMvc();
    }

这允许从localhost:5000/api/values localhost:5000/values获取值。我真的不需要或不喜欢这种歧义,但它现在解决了我的问题。

于 2018-07-12T11:43:10.067 回答