【问题标题】:Specifying the url (port) that a asp.net core 1.0 WebAPI.exe should use in program.cs for both prod and dev为 prod 和 dev 指定 asp.net core 1.0 WebAPI.exe 应在 program.cs 中使用的 url(端口)
【发布时间】:2016-06-16 14:44:10
【问题描述】:

我在我的 asp.net core 1.0 web api (.NET Framework) program.cs 中执行以下操作,以指定我希望我的 web api exe 在哪个端口中运行,仅用于开发目的:

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .UseUrls(new string[1] { "http://*:12012" })
        .Build();

    host.Run();
}

但是,当我发布到生产环境时,此行会导致 WebAPI 出错,因为我希望 exe 使用生产网络 API url,即 productionWeb/api/values 而不是 localhost:12012/values

我是否可以两全其美地指定我希望它在端口 12012 上运行以用于开发目的和生产 url 用于生产目的?

我目前的解决方案是在发布前注释掉该行。

【问题讨论】:

  • 您要发布到哪里?天蓝色?你自己的服务器?
  • 您是否在生产环境中的 IIS 后面运行它? UseUrls 应该在 UseIISIntegration 之前,否则你会覆盖 IIS 设置 - 我在这里描述它:blog.3d-logic.com/2016/06/08/…。请注意,建议在 IIS 或 nginx 等代理后面运行 ASP.NET Core 应用程序
  • 是的,我正在发布到实际的 IIS。所以你是说如果我改变顺序我应该很好,对吧?
  • 是的,更改顺序应该可以解决此问题。

标签: c# asp.net asp.net-web-api asp.net-core asp.net-core-1.0


【解决方案1】:

使用 IIS 时,您将覆盖 IIS(AspNet 核心模块)通过在 .UseIISIntegration() 之后调用 .UseUrls() 告诉应用程序监听的 url。您应该更改这两个调用的顺序,使.UseIISIntegration().UseUrl() 之后。 .UseIISIntegration() 不会触及你设置的 url,如果你没有运行 IIS,所以在开发中你的应用程序仍然会监听端口 12012。当使用 IIS 运行时,.UseIISIntegration() 将覆盖 url 来监听 IIS 告诉它监听的端口在。我写了一个post on running Asp.NET Core apps with IIS and Azure Websites,解释了事情是如何工作的,包括这个细微差别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2017-02-22
    相关资源
    最近更新 更多