.net - 使用路径前缀在生产中运行 asp.net core 应用程序

标签 .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 中的所有本地路径,因此值 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/

相关文章:

.net - 数据表逐列添加而不是逐行添加

c# - 目标框架未在 Visual Studio 2019 中显示

c# - .NET Core 应用程序中的 .NETStandard Library 1.6.0 依赖项

c# - 自定义验证属性的依赖注入(inject)

c# - 如何从 .NET Core 中的 Socket 接收数据?

c# - 在任何情况下,在 ReaderWriterLockSlim 上调用 EnterWriteLock 应该进入读锁吗?

c# - 使用XmlSerializer时可以在xml序列化中使用抽象类吗?

c# - 带有 Entity Framework 7 (rc1) 的全局表前缀

nunit - 在 ASP.NET 5 项目中运行 NUnit 测试(在 VS 测试资源管理器中)

c# - 从 VirtualMachineScaleSetResource 获取网络接口(interface)