ASP.NET Coreアプリケーションがホストされているポートを指定するにはどうすればよいですか?


191

エントリポイントで使用WebHostBuilderする場合Main、バインド先のポートを指定するにはどうすればよいですか?

デフォルトでは5000を使用します。

この質問は新しいASP.NET Core API(現在1.0.0-RC2)に固有のものであることに注意してください。


10
フォルダlaunchSettings.jsonから調べPropertiesます。でポートを変更できますlaunchUrl
Oleg 2016年

@ Oleg、RC1のプロジェクトテンプレートから残っているIIS関連の設定がいくつかありました。効果はありませんでした。
Drew Noakes、2016年

一つは使用することができますhosting.json(参照答えを単に追加RC1でのデフォルトと1つの必要性によって使用された、) .AddJsonFile("hosting.json", optional: true)(参照ここ
オレグ

1
構成スタックを使用することは、純粋にVS固有のメカニズム(launchSettings.json)に依存するよりも確かにはるかに優れているようです。
ケビン・シャレー

@DrewNoakes:私は古い回答UPDATED 2パートを追加しました。デフォルトのポートを変更するいくつかのバリエーションhosting.jsonと、バインディングを構成するためのコマンドラインまたはコマンドラインの使用方法について説明します。
Oleg 2016年

回答:


234

ASP.NET Core 3.1では、カスタムポートを指定する主な方法が4つあります。

  • コマンドライン引数を使用して、.NETアプリケーションを--urls=[url]次のように起動します。
dotnet run --urls=http://localhost:5001/
  • を使用appsettings.jsonして、Urlsノードを追加します。
{
  "Urls": "http://localhost:5001"
}
  • での環境変数の使用ASPNETCORE_URLS=http://localhost:5001/
  • UseUrls()プログラムで行う場合は、を使用します。
public static class Program
{
    public static void Main(string[] args) =>
        CreateHostBuilder(args).Build().Run();

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(builder =>
            {
                builder.UseStartup<Startup>();
                builder.UseUrls("http://localhost:5001/");
            });
}

または、汎用ホストビルダーの代わりにWebホストビルダーをまだ使用している場合:

public class Program
{
    public static void Main(string[] args) =>
        new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseUrls("http://localhost:5001/")
            .Build()
            .Run();
}

40
コードで直接固定URLを使用することは、私の意見では最良の選択ではありません。
Oleg 2016年

3
これをテストし、それはうまくいきます、ありがとう。@オレグ、必要な構成を示す答えを具体化できますか?これを設定ファイルに含めるとよいでしょう。
Drew Noakes

4
@Olegかもしれませんが、使用UseUrlsはASP.NETチームがセルフホスティングシナリオに推奨するアプローチです(値自体をハードコードする必要はありません)。とは言っても、構成ビルダーを使用してその方法を説明するために私の回答を更新しました。
ケビン・シャレー

1
@Pinpoint:以前の回答を投稿しまし。ここで、を使用してポートを変更する方法を見つけることができますhosting.json。RC2の情報を強制的に読むことだけが必要です(アナウンスを参照)。
Oleg 2016年

2
:あなたは、次のパッケージが必要ですusing Microsoft.Extensions.Configuration.CommandLine;
学習者の

87

Kestrelセクションをasp.net core 2.1+ appsettings.jsonファイルに挿入できます。

  "Kestrel": {
    "EndPoints": {
      "Http": {
        "Url": "http://0.0.0.0:5002"
      }
    }
  },

3
ありがとう、私が必要なものだけです:-) UseUrls()より優れています。詳細:docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/...
KTCO

7
これは実際にはで生成されたバイナリで動作しdotnet publishます。
rsenna

これは、アプリがIISでホストされているポートではなく、KestrelがIIS(プロキシ)にバインドされているポートを定義しいませんか?
user12345

@ user12345 IISホスティングでは、Kestrelは動的ポートバインディングを使用します。
menxin

1
exe、briliantからweb apiを実行するnetcore 3.0でも動作します!!!
vidriduch

57

VS docker統合でこれを行う人を助けるためのフォローアップ回答。google appengineの「柔軟な」環境を使用して実行するには、ポート8080に変更する必要がありました。

Dockerfileには次のものが必要です。

ENV ASPNETCORE_URLS=http://+:8080
EXPOSE 8080

また、docker-compose.ymlのポートも変更する必要があります。

    ports:
      - "8080"

3
おかげで、Windowsコマンドプロンプトで同じ方法で変数を設定できます:set ASPNETCORE_URLS = http:// *:8080
Pavel Biryukov

1
これは私にはうまくいきません。これで修正したのはこれだけですか?画像のあとがきに特別なことをしたり、Dockerで何かをしたりする必要がありましたか?
スティーブ

変更されたかもしれないほど長い間ですが、それを思い出せば、それだけで十分でした。
ケーシー

VS Codeでは、launch.jsonの "env"セクションに "ASPNETCORE_URLS": "http:// +:8080"を追加して、他の設定を上書きできます。
gorlok

31

代替ソリューションはhosting.json、プロジェクトのルートでを使用することです。

{
  "urls": "http://localhost:60000"
}

そして次に Program.cs

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("hosting.json", true)
        .Build();

    var host = new WebHostBuilder()
        .UseKestrel(options => options.AddServerHeader = false)
        .UseConfiguration(config)
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

7
これは私にはうまくいきませんでした。server.urlsはurlsになり、project.json "publishOptions":{"include":["appsettings.json"、 "web.config"、 "wwwroot"、 "hosting.json"]}にエントリを必ず追加してください。
Manish Jain

3
私は正しいプロパティで彼の答えを更新しましたurls
@ManishJainに

30

アプリを変更せずにホスティングURLを指定できます。

Properties/launchSettings.jsonプロジェクトディレクトリにファイルを作成し、次のように入力します。

{
  "profiles": {
    "MyApp1-Dev": {
        "commandName": "Project",
        "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
        },
        "applicationUrl": "http://localhost:5001/"
    }
  }
}

dotnet runコマンドはlaunchSettings.jsonファイルを選択し、コンソールに表示します。

C:\ProjectPath [master ≡]
λ  dotnet run
Using launch settings from C:\ProjectPath\Properties\launchSettings.json...
Hosting environment: Development
Content root path: C:\ProjectPath
Now listening on: http://localhost:5001
Application started. Press Ctrl+C to shut down. 

詳細:https : //docs.microsoft.com/en-us/aspnet/core/fundamentals/environments


1
appSettings.jsonでも動作しますか?
Paulo

いいえ、それはにある必要が[ProjectRoot]/Properties/launchSettings.jsonありますが、美しいのは問題なく動作することです。
Chaim Eliyah

5
これは開発中にのみ役立ち、バイナリでは機能しません。使用dotnet runするには、ソースコードにアクセスする必要があります。
rsenna

18

使用する場合 dotnet run

dotnet run --urls="http://localhost:5001"

完璧な答えです!港湾労働者で動作します。「localhost」のみを「0.0.0.0」に置き換えました
AndrewPt

17

.net core 2.2より上では、メソッドMainはWebHost.CreateDefaultBuilder(args)でargsをサポートします

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

プロジェクトをビルドして、bin次のようなコマンドを実行できます

dotnet <yours>.dll --urls=http://localhost:5001

またはマルチURLで

dotnet <yours>.dll --urls="http://localhost:5001,https://localhost:5002"

あなたのことができ、単純な「DOTNET実行--urls =使用する0.0.0.0:5001プロジェクトディレクトリ内の」
oudi

12

Dockerコンテナ(Linuxバージョン)でホストすると、「接続が拒否されました」というメッセージが表示される場合があります。その場合、ローカルホストのループバックの代わりに「このマシン上のすべてのIPアドレス」を意味するIPアドレス0.0.0.0を使用して、ポート転送を修正できます。

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

        host.Run();
    }
}

5

または、コマンドラインからアプリを実行してポートを指定することもできます。

単にコマンドを実行します:

dotnet run --server.urls http://localhost:5001

注:ここで、5001は実行するポートです。


5

.Net Core 3.1では、Microsoft Docに従ってください。これは非常に簡単です。 。kestrel-aspnetcore-3.1

要約する:

  1. 以下のConfigureServicesセクションをCreateDefaultBuilderに追加しますProgram.cs

    // using Microsoft.Extensions.DependencyInjection;
    
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((context, services) =>
            {
                services.Configure<KestrelServerOptions>(
                    context.Configuration.GetSection("Kestrel"));
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
  2. 以下の基本的な設定をappsettings.jsonファイルに追加します(Microsoftの記事でより多くの設定オプション):

    "Kestrel": {
        "EndPoints": {
            "Http": {
                "Url": "http://0.0.0.0:5002"
            }
        }
    }
  3. プロジェクトのPublish / Debug / Release binariesフォルダーでCMDまたはコンソールを開き、次を実行します。

    dotnet YourProject.dll
  4. http:// localhost:5002でサイト/ apiの探索をお楽しみください


3

properties / launchSettings.jsonに移動してappnameを見つけ、その下でapplicationUrlを見つけます。ご覧のとおり、それはlocalhost:5000を実行しています。必要に応じて変更してください。そしてdotnet runを実行します......ばんざーい


0

以下を使用して、Net Core 3.1のポートの問題を修正しました

Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
        .ConfigureWebHost(x => x.UseUrls("https://localhost:4000", "http://localhost:4001"))
        .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
}

次を使用してアプリケーションにアクセスできます

http://localhost:4000

https://localhost:4001
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.