ASP.NET Core uygulamasının barındırıldığı bağlantı noktası nasıl belirlenir?


197

Kullanırken WebHostBuilderbir de Maingiriş noktası, nasıl o bağlanan bağlantı noktasını belirtebilirsiniz?

Varsayılan olarak 5000 kullanır.

Bu sorunun yeni ASP.NET Core API'sine (şu anda 1.0.0-RC2'de) özel olduğunu unutmayın.


10
incelemek launchSettings.jsondan Propertiesklasöre. İçindeki bağlantı noktasını değiştirebilirsiniz launchUrl.
Oleg

@Oleg, orada RC1 proje şablonundan kalan bazı IIS ile ilgili ayarları vardı. Etkileri yoktu.
Drew Noakes

Bir kullanabilirsiniz hosting.json(bkz cevabı sadece eklemek RC1 varsayılan ve bir ihtiyaç tarafından kullanıldı,) .AddJsonFile("hosting.json", optional: true)(bkz burada )
Oleg

1
Yapılandırma yığınını kullanmak, tamamen VS'ye özgü bir mekanizmaya (launchSettings.json) güvenmekten çok daha iyi görünüyor.
Kévin Chalet

@DrewNoakes: Ben eklenmiş eski cevabı ile GÜNCELLEME 2 parçası. Bağlantının hosting.jsonyapılandırılması için varsayılan bağlantı noktasını ve kullanımını veya komut satırını değiştirmenin bazı varyasyonlarını açıklar .
Oleg

Yanıtlar:


244

ASP.NET Core 3.1'de, özel bir bağlantı noktası belirtmenin 4 ana yolu vardır:

  • .NET uygulamanızı aşağıdakilerle başlatarak komut satırı bağımsız değişkenlerini kullanarak --urls=[url]:
dotnet run --urls=http://localhost:5001/
  • appsettings.jsonBir Urlsdüğüm ekleyerek kullanma :
{
  "Urls": "http://localhost:5001"
}
  • Ortam değişkenlerini, ile kullanma ASPNETCORE_URLS=http://localhost:5001/.
  • Kullanılması UseUrls()bunu programlı yapmayı tercih ederim eğer:
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/");
            });
}

Veya, hala genel ana bilgisayar üreticisi yerine web ana bilgisayar oluşturucusunu kullanıyorsanız:

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
Sabit URL'lerin doğrudan kodda kullanılması bence en iyi seçim değildir.
Oleg

3
Bunu test ettim ve iyi çalışıyor, teşekkürler. @Oleg, hangi yapılandırmaya ihtiyacınız olduğunu gösteren bir cevap verebilir misiniz? Bunun bir yapılandırma dosyasında olması iyi olabilir.
Drew Noakes

4
@Oleg belki de, UseUrlsASP.NET ekibi tarafından kendi kendini barındıran senaryolar için önerilen yaklaşımdır (değerin kendisinin açık bir şekilde kodlanması gerekmez). Bununla birlikte, yapılandırma oluşturucuyu kullanarak bunu nasıl yapabileceğinizi belirtmek için cevabımı güncelledim.
Kévin Chalet

1
@Pinpoint: Bağlantı noktasını kullanarak nasıl değiştirileceğini bulabileceğiniz eski cevabı yayınladım hosting.json. Yapılması gereken tek şey RC2'deki bilgileri okumaya zorlamaktır ( duyuruya bakınız ).
Oleg

2
Aşağıdaki pakete ihtiyacınız olacak:using Microsoft.Extensions.Configuration.CommandLine;
Öğrenci

89

Kerkenez bölümünü asp.net core 2.1+ appsettings.json dosyasına ekleyebilirsiniz.

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

3
Teşekkür ederim, sadece ne ihtiyacım :-) UseUrls () daha iyi. Daha fazla detay: docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/…
KTCO

7
BU aslında üzerinden oluşturulan ikili dosyalar ile çalışır dotnet publish.
rsenna

Kestrel bağlantı noktasını tanımlayan bu , uygulamanın IIS'de barındırıldığı bağlantı noktası yerine IIS'ye (proxy) bağlı değil mi?
user12345

@ user12345 IIS barındırma işleminde, Kestrel dinamik bağlantı noktası bağlama özelliğini kullanır.
menxin

1
Ayrıca netcore 3.0 exe, briliant gelen web api ile çalışır !!!
vidriduch

58

VS docker entegrasyonu ile bunu yapan herkese yardımcı olmak için cevabı takip edin. Google appengine "esnek" ortamını kullanarak çalıştırmak için bağlantı noktası 8080 değiştirmek gerekiyordu.

Dockerfile dosyasında aşağıdakilere ihtiyacınız olacak:

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

bağlantı noktasını da docker-compose.yml dosyasında değiştirmeniz gerekir:

    ports:
      - "8080"

3
Teşekkürler, windows komut promt değişkenlerini aynı şekilde ayarlayabiliriz: set ASPNETCORE_URLS = http: // *: 8080
Pavel Biryukov

1
bu benim için çalışmıyor. tüm değiştirdiğinizden emin misiniz? Resim sonradan kelimelerinize veya liman işçisine özel bir şey yapmanız mı gerekiyordu?
Steve

Çok uzun zaman değişmiş olabilir, ama hatırlıyorsam tek yapmam gereken buydu.
Casey

VS Kodunda, diğer ayarları geçersiz kılmak için launch.json öğesinin "env" bölümüne "ASPNETCORE_URLS": "http: // +: 8080" ifadesini ekleyebilirsiniz.
gorlok

31

Alternatif çözüm, hosting.jsonprojenin kökünde a kullanmaktır .

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

Ve sonra 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
Bu benim için işe yaramadı. server.urls artık url'dir ve project.json "publishOptions": {"include": ["appsettings.json", "web.config", "wwwroot", "hosting.json"]} girişini eklediğinizden emin olun,
Manish Jain

3
Cevabını doğru mülkle güncelledim urls- teşekkürler @ManishJain
TetraDev

30

Uygulamanızda herhangi bir değişiklik yapmadan barındırma URL'si belirtebilirsiniz.

Properties/launchSettings.jsonProje dizininizde bir dosya oluşturun ve böyle bir şeyle doldurun:

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

dotnet runkomutu launchSettings.jsondosyanızı seçmeli ve konsolda gösterecektir:

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. 

Daha fazla detay: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments


1
AppSettings.json'da da mı çalışıyorsunuz?
Paulo

Hayır, içinde olması gerekiyor [ProjectRoot]/Properties/launchSettings.json, ama güzel olan şey sorunsuz bir şekilde çalışıyor.
Chaim Eliyah

5
Bu sadece geliştirme sırasında faydalıdır, ikili dosyalar ile çalışmaz. kullanmak dotnet runiçin kaynak koduna erişmeniz gerekir.
rsenna

18

Kullanıyorsanız dotnet run

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

Mükemmel cevap! Liman işlerinde çalışır. Yalnızca "localhost" yerine "0.0.0.0" değiştirildi
AndrewPt

17

.Net core 2.2'nin üstünde WebHost.CreateDefaultBuilder (args) ile ana destek argümanları yöntemi

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

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

Projenizi oluşturabilir ve şu binşekilde komut çalıştırmaya gidebilirsiniz

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

veya çoklu URL'lerle

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

proje dizininde 'dotnet run --urls = 0.0.0.0:5001 ' kullanabilirsiniz
Ocak'ta

12

Bağlantı istasyonu kapsayıcılarında (benim için linux sürümü) barındırıldığında, bir 'Bağlantı Reddedildi' iletisi alabilirsiniz. Bu durumda , port yönlendirmesini düzeltmek için localhost geri döngü yerine "bu makinedeki tüm IP adresleri" anlamına gelen 0.0.0.0 IP adresini kullanabilirsiniz .

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

Alternatif olarak, uygulamayı komut satırı üzerinden çalıştırarak bağlantı noktasını belirleyebilirsiniz.

Sadece komutu çalıştırın:

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

Not: 5001 üzerinde çalışmak istediğiniz bağlantı noktasıdır.


5

Net Core 3.1'de sadece oldukça basit olan Microsoft Doc'u izleyin: kestrel-aspnetcore-3.1

Özetlemek:

  1. CreateDefaultBuilder'a aşağıdaki ConfigureServices bölümünü ekleyin 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. Aşağıdaki temel yapılandırmayı appsettings.jsondosyaya ekleyin (Microsoft makalesinde daha fazla yapılandırma seçeneği):

    "Kestrel": {
        "EndPoints": {
            "Http": {
                "Url": "http://0.0.0.0:5002"
            }
        }
    }
  3. Project Publish / Debug / Release binaries klasöründe CMD veya Konsolu açın ve çalıştırın:

    dotnet YourProject.dll
  4. Http: // localhost: 5002 adresinde sitenizi / API'nizi keşfetmenin keyfini çıkarın


3

Properties / launchSettings.json adresine gidin ve uygulama adınızı bulun ve bunun altında applicationUrl dosyasını bulun. göreceksiniz, localhost çalışıyor: 5000, istediğiniz gibi değiştirin. ve sonra dotnet run ...... koşmak


0

Aşağıdakileri kullanarak Net core 3.1'deki bağlantı noktası sorununu çözdüm

Program.cs dosyasında

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

Uygulamaya şunu kullanarak erişebilirsiniz:

http://localhost:4000

https://localhost:4001
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.