Bagaimana menentukan port tempat aplikasi ASP.NET Core di-host?

198

Saat menggunakan WebHostBuilderdi Mainentry-point, bagaimana saya bisa menentukan port yang diikatnya?

Secara default menggunakan 5000.

Perhatikan bahwa pertanyaan ini khusus untuk ASP.NET Core API baru (saat ini dalam 1.0.0-RC2).

Drew Noakes
sumber
10
periksa launchSettings.jsondari Propertiesfolder. Anda dapat mengubah porta di launchUrl.
Oleg
@ Oleg, saya memiliki beberapa pengaturan terkait IIS di sana yang tersisa dari template proyek RC1. Mereka tidak memiliki efek apa pun.
Drew Noakes
Satu dapat menggunakan hosting.json(lihat jawabannya ), yang digunakan secara default di RC1 dan satu hanya perlu menambahkan .AddJsonFile("hosting.json", optional: true)(lihat di sini )
Oleg
1
Menggunakan susunan konfigurasi tampaknya memang jauh lebih baik daripada mengandalkan mekanisme murni khusus VS (launchSettings.json).
Kévin Chalet
@DrewNoakes: Saya menambahkan jawaban lama saya dengan UPDATED 2 bagian. Ini menjelaskan beberapa variasi mengubah port default dan penggunaan hosting.jsonatau baris perintah untuk mengkonfigurasi pengikatan.
Oleg

Jawaban:

246

Di ASP.NET Core 3.1, ada 4 cara utama untuk menentukan port khusus:

  • Menggunakan argumen baris perintah, dengan memulai aplikasi .NET Anda dengan --urls=[url]:
dotnet run --urls=http://localhost:5001/
  • Menggunakan appsettings.json, dengan menambahkan Urlssimpul:
{
  "Urls": "http://localhost:5001"
}
  • Menggunakan variabel lingkungan, dengan ASPNETCORE_URLS=http://localhost:5001/.
  • Menggunakan UseUrls(), jika Anda lebih suka melakukannya secara terprogram:
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/");
            });
}

Atau, jika Anda masih menggunakan pembuat host web alih-alih pembuat host generik:

public class Program
{
    public static void Main(string[] args) =>
        new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseUrls("http://localhost:5001/")
            .Build()
            .Run();
}
Kévin Chalet
sumber
40
Menurut saya, penggunaan URL tetap secara langsung dalam kode bukanlah pilihan terbaik.
Oleg
3
Menguji ini dan itu bekerja dengan baik, terima kasih. @Oleg, dapatkah Anda menyempurnakan jawaban yang menunjukkan konfigurasi apa yang Anda butuhkan? Mungkin ada baiknya memiliki ini dalam file konfigurasi.
Drew Noakes
4
@Oleg mungkin, tetapi menggunakan UseUrlsadalah pendekatan yang direkomendasikan oleh tim ASP.NET untuk skenario self-hosting (nilai itu sendiri tidak harus hardcoded, jelas). Yang mengatakan, saya memperbarui jawaban saya untuk menyebutkan bagaimana Anda bisa melakukan itu menggunakan pembangun konfigurasi.
Kévin Chalet
1
@ Pinpoint: Saya memposting jawaban lama , di mana orang dapat menemukan cara mengubah port menggunakan hosting.json. Satu-satunya hal yang harus dilakukan adalah memaksa membaca informasi di RC2 (lihat pengumuman ).
Oleg
2
Anda memerlukan paket berikut:using Microsoft.Extensions.Configuration.CommandLine;
Pelajar
89

Anda dapat memasukkan bagian Kestrel di file asp.net core 2.1+ appsettings.json.

  "Kestrel": {
    "EndPoints": {
      "Http": {
        "Url": "http://0.0.0.0:5002"
      }
    }
  },
menxin
sumber
3
Terima kasih, hanya yang saya butuhkan :-) Lebih baik daripada UseUrls (). Informasi lebih rinci: docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/...
KTCO
7
INI benar-benar bekerja dengan biner yang dihasilkan dotnet publish.
rsenna
Bukankah ini mendefinisikan port Kestrel terikat ke IIS (proxy) daripada port aplikasi di-host di IIS?
user12345
@ user12345 Di hosting IIS, Kestrel menggunakan pengikatan port dinamis.
menxin
1
juga bekerja dengan netcore 3.0 menjalankan web api dari exe, briliant !!!
vidriduch
58

Tindak lanjut jawaban untuk membantu siapa saja yang melakukan ini dengan integrasi VS docker Saya perlu mengubah port 8080 untuk menjalankan menggunakan lingkungan "fleksibel" di google appengine.

Anda akan memerlukan yang berikut ini di Dockerfile Anda:

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

dan Anda harus memodifikasi port di docker-compose.yml juga:

    ports:
      - "8080"
Casey
sumber
3
Terima kasih, kita dapat mengatur variabel dalam perintah windows promt dengan cara yang sama: set ASPNETCORE_URLS = http: // *: 8080
Pavel Biryukov
1
ini tidak bekerja untuk saya. apakah Anda yakin ini yang Anda modifikasi? Apakah Anda perlu melakukan sesuatu yang istimewa untuk kata penutup gambar Anda atau sesuatu dengan buruh pelabuhan?
Steve
Sudah begitu lama sehingga mungkin telah berubah, tetapi jika saya ingat hanya itu yang perlu saya lakukan.
Casey
dalam VS Code, Anda dapat menambahkan "ASPNETCORE_URLS": "http: // +: 8080" pada bagian "env" di launch.json, untuk mengganti pengaturan lainnya.
gorlok
31

Solusi alternatif adalah dengan menggunakan hosting.jsondi root proyek.

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

Dan kemudian 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();
}
Dennis
sumber
7
Ini tidak berhasil untuk saya. server.urls sekarang adalah url dan pastikan Anda menambahkan entri ke project.json "publishOptions": {"include": ["appsettings.json", "web.config", "wwwroot", "hosting.json"]},
Manish Jain
3
Saya memperbarui jawabannya dengan properti yang benar urls- terima kasih @ManishJain
TetraDev
30

Anda dapat menentukan URL hosting tanpa perubahan apa pun pada aplikasi Anda.

Buat Properties/launchSettings.jsonfile di direktori proyek Anda dan isi dengan sesuatu seperti ini:

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

dotnet runperintah harus memilih launchSettings.jsonfile Anda dan akan menampilkannya di konsol:

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. 

Detail lebih lanjut: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environmentments

Acak
sumber
1
Bekerja di appSettings.json juga?
Paulo
Tidak, itu harus di dalam [ProjectRoot]/Properties/launchSettings.json, tetapi hal yang indah adalah, ia bekerja tanpa hambatan.
Chaim Eliyah
5
Ini hanya berguna selama pengembangan, tidak bekerja dengan binari. untuk menggunakan dotnet runAnda perlu akses ke kode sumber.
rsenna
18

Jika menggunakan dotnet run

dotnet run --urls="http://localhost:5001"
jabu.hlong
sumber
Jawaban sempurna! Bekerja di buruh pelabuhan. Diganti hanya "localhost" dengan "0.0.0.0"
AndrewPt
17

Di atas .net inti 2.2 metode Dukungan utama args dengan WebHost.CreateDefaultBuilder (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>();
}

Anda dapat membangun proyek Anda dan binmenjalankan perintah seperti ini

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

atau dengan multi-url

dotnet <yours>.dll --urls="http://localhost:5001,https://localhost:5002"
oudi
sumber
Anda bisa mudah untuk digunakan 'dotnet run --urls = 0.0.0.0:5001 ' dalam direktori proyek
Oudi
12

Ketika dihosting di wadah buruh pelabuhan (versi linux untuk saya), Anda mungkin mendapatkan pesan 'Sambungan Ditolak'. Dalam hal ini Anda dapat menggunakan alamat IP 0.0.0.0 yang berarti "semua alamat IP pada mesin ini" bukan loopback localhost untuk memperbaiki penerusan port.

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();
    }
}
R. van Diesen
sumber
5

Atau, Anda dapat menentukan port dengan menjalankan aplikasi melalui baris perintah.

Cukup jalankan perintah:

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

Catatan: Di mana 5001 adalah port yang ingin Anda jalankan.

Mwiza
sumber
5

Pada .Net Core 3.1 cukup ikuti Microsoft Doc bahwa ini cukup sederhana: kestrel-aspnetcore-3.1

Untuk meringkas:

  1. Tambahkan bagian ConfigureServices di bawah ini ke CreateDefaultBuilder pada 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. Tambahkan konfigurasi dasar di bawah ini ke appsettings.jsonfile (lebih banyak opsi konfigurasi pada artikel Microsoft):

    "Kestrel": {
        "EndPoints": {
            "Http": {
                "Url": "http://0.0.0.0:5002"
            }
        }
    }
  3. Buka CMD atau Konsol di folder binari Terbitkan / Debug / Rilis proyek Anda dan jalankan:

    dotnet YourProject.dll
  4. Nikmati menjelajahi situs / api Anda di http: // localhost: 5002

Ernest
sumber
3

Pergi ke properties / launchSettings.json dan temukan nama aplikasi Anda dan di bawah ini, cari applicationUrl. Anda akan melihat, itu menjalankan localhost: 5000, ubah ke apa pun yang Anda inginkan. lalu jalankan dotnet run ...... hore

Md. Rafee
sumber
0

Saya memperbaiki masalah port di Net core 3.1 dengan menggunakan yang berikut ini

Di 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>(); });
}

Anda dapat mengakses aplikasi menggunakan

http://localhost:4000

https://localhost:4001
Sukesh Chand
sumber