Wie kann der Port angegeben werden, auf dem eine ASP.NET Core-Anwendung gehostet wird?


191

Bei Verwendung WebHostBuilderin aMainWie kann ich bei Einstiegspunkt den Port angeben, an den er gebunden ist?

Standardmäßig werden 5000 verwendet.

Beachten Sie, dass diese Frage spezifisch für die neue ASP.NET Core-API ist (derzeit in 1.0.0-RC2).


10
prüft launchSettings.jsonvon PropertiesOrdnern. Sie können den Port in der ändern launchUrl.
Oleg

@Oleg, ich hatte einige IIS-bezogene Einstellungen aus der RC1-Projektvorlage übrig. Sie hatten keine Wirkung.
Drew Noakes

Man kann verwenden hosting.json(siehe die Antwort ), die standardmäßig in RC1 verwendet wurden und man muss nur hinzufügen .AddJsonFile("hosting.json", optional: true)(siehe hier )
Oleg

1
Die Verwendung des Konfigurationsstapels scheint in der Tat viel besser zu sein, als sich auf einen rein VS-spezifischen Mechanismus (launchSettings.json) zu verlassen.
Kévin Chalet

@DrewNoakes: Ich habe meine alte Antwort mit UPDATED 2 Teil angehängt . Es werden einige Variationen beim Ändern des Standardports und der Verwendung von hosting.jsonoder der Befehlszeile zum Konfigurieren der Bindung beschrieben.
Oleg

Antworten:


233

In ASP.NET Core 3.1 gibt es vier Möglichkeiten, einen benutzerdefinierten Port anzugeben:

  • Starten Sie Ihre .NET-Anwendung mithilfe von Befehlszeilenargumenten mit --urls=[url]:
dotnet run --urls=http://localhost:5001/
  • Verwenden appsettings.jsondurch Hinzufügen eines UrlsKnotens:
{
  "Urls": "http://localhost:5001"
}
  • Verwenden von Umgebungsvariablen mit ASPNETCORE_URLS=http://localhost:5001/.
  • Verwenden Sie UseUrls(), wenn Sie es lieber programmgesteuert ausführen möchten:
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/");
            });
}

Oder wenn Sie immer noch den Webhost-Builder anstelle des generischen Host-Builders verwenden:

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
Die Verwendung fester URLs direkt im Code ist meiner Meinung nach nicht die beste Wahl.
Oleg

3
Getestet und es funktioniert gut, danke. @Oleg, könntest du eine Antwort ausarbeiten, die zeigt, welche Konfiguration du brauchst? Es kann gut sein, dies in einer Konfigurationsdatei zu haben.
Drew Noakes

4
@Oleg vielleicht, aber die Verwendung UseUrlsist der vom ASP.NET-Team empfohlene Ansatz für Self-Hosting-Szenarien (der Wert selbst muss natürlich nicht fest codiert sein). Trotzdem habe ich meine Antwort aktualisiert, um zu erwähnen, wie Sie dies mit dem Konfigurations-Builder tun können.
Kévin Chalet

1
@Pinpoint: Ich habe die alte Antwort gepostet , in der man findet, wie man den Port mit ändert hosting.json. Das einzige, was man tun muss, ist das Lesen der Informationen in RC2 zu erzwingen (siehe Ankündigung ).
Oleg

2
Sie benötigen das folgende Paket:using Microsoft.Extensions.Configuration.CommandLine;
Lerner

85

Sie können den Kestrel-Abschnitt in die Datei asp.net core 2.1+ appsettings.json einfügen.

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

3
Danke, genau das, was ich brauchte :-) Besser als UseUrls (). Weitere Details: docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/…
KTCO

7
Dies funktioniert tatsächlich mit Binärdateien, die durch generiert werden dotnet publish.
Rsenna

Definiert dies nicht den Port, an dem Kestrel an IIS (Proxy) gebunden ist, und nicht den Port, an dem die App in IIS gehostet wird?
user12345

@ user12345 Beim IIS-Hosting verwendet Kestrel die dynamische Portbindung.
Menxin

1
funktioniert auch mit netcore 3.0 mit web api von exe, brillant !!!
Vidriduch

57

Follow-up-Antwort, um allen bei der VS-Docker-Integration zu helfen. Ich musste auf Port 8080 wechseln, um die "flexible" Umgebung in Google Appengine verwenden zu können.

In Ihrer Docker-Datei benötigen Sie Folgendes:

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

und Sie müssen auch den Port in docker-compose.yml ändern:

    ports:
      - "8080"

3
Vielen Dank, wir können Variablen in Windows-Befehl Promt auf die gleiche Weise setzen: set ASPNETCORE_URLS = http: // *: 8080
Pavel Biryukov

1
Das funktioniert bei mir nicht. Sind Sie sicher, dass dies alles ist, was Sie geändert haben? Mussten Sie etwas Besonderes an Ihren Bildnachwörtern oder etwas mit Docker tun?
Steve

Es ist so lange her, dass es sich vielleicht geändert hat, aber wenn ich mich erinnere, war das alles, was ich tun musste.
Casey

In VS Code können Sie "ASPNETCORE_URLS": "http: // +: 8080" im Abschnitt "env" von launch.json hinzufügen, um andere Einstellungen zu überschreiben.
Gorlok

31

Eine alternative Lösung besteht darin, a hosting.jsonim Stammverzeichnis des Projekts zu verwenden.

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

Und dann rein 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
Das hat bei mir nicht funktioniert. server.urls ist jetzt eine URL und stellt sicher, dass Sie einen Eintrag zu project.json hinzufügen. "PublishOptions": {"include": ["appsettings.json", "web.config", "wwwroot", "hosts.json"]},
Manish Jain

3
Ich habe seine Antwort mit der richtigen Eigenschaft aktualisiert urls- danke @ManishJain
TetraDev

30

Sie können die Hosting-URL angeben, ohne Änderungen an Ihrer App vorzunehmen.

Erstellen Sie eine Properties/launchSettings.jsonDatei in Ihrem Projektverzeichnis und füllen Sie sie wie folgt:

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

dotnet runDer Befehl sollte Ihre launchSettings.jsonDatei auswählen und in der Konsole anzeigen:

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. 

Weitere Details: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments


1
Arbeiten Sie auch in der appSettings.json?
Paulo

Nein, es muss drin sein [ProjectRoot]/Properties/launchSettings.json, aber das Schöne ist, es funktioniert reibungslos.
Chaim Eliyah

5
Dies ist nur während der Entwicklung nützlich, funktioniert nicht mit Binärdateien. Zur Verwendung dotnet runbenötigen Sie Zugriff auf den Quellcode.
Rsenna

18

Bei Verwendung dotnet run

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

Die perfekte Antwort! Funktioniert im Docker. Ersetzte nur "localhost" durch "0.0.0.0"
AndrewPt

17

Über .net Core 2.2 die Methode Main Support Args mit 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>();
}

Sie können Ihr Projekt erstellen und den binBefehl wie folgt ausführen

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

oder mit Multi-URLs

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

Sie können einfach 'dotnet run --urls = 0.0.0.0:5001 ' im Projektverzeichnis verwenden
oudi

12

Beim Hosting in Docker-Containern (Linux-Version für mich) wird möglicherweise die Meldung "Verbindung abgelehnt" angezeigt. In diesem Fall können Sie die IP-Adresse 0.0.0.0 verwenden, was "alle IP-Adressen auf diesem Computer" anstelle des localhost- Loopbacks bedeutet, um die Portweiterleitung zu korrigieren.

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

Alternativ können Sie den Port angeben, indem Sie die App über die Befehlszeile ausführen.

Führen Sie einfach den Befehl aus:

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

Hinweis: Wobei 5001 der Port ist, auf dem Sie ausgeführt werden möchten.


5

Folgen Sie auf .Net Core 3.1 einfach Microsoft Doc, dass es ziemlich einfach ist: kestrel-aspnetcore-3.1

Zusammenfassen:

  1. Fügen Sie CreateDefaultBuilder den folgenden Abschnitt ConfigureServices hinzu 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. Fügen Sie der appsettings.jsonDatei die folgende Grundkonfiguration hinzu (weitere Konfigurationsoptionen im Microsoft-Artikel):

    "Kestrel": {
        "EndPoints": {
            "Http": {
                "Url": "http://0.0.0.0:5002"
            }
        }
    }
  3. Öffnen Sie CMD oder Console in Ihrem Projekt. Binärordner veröffentlichen / debuggen / freigeben und führen Sie Folgendes aus:

    dotnet YourProject.dll
  4. Viel Spaß beim Erkunden Ihrer Website / API unter Ihrem http: // localhost: 5002


3

Gehen Sie zu properties / launchSettings.json und suchen Sie Ihren App-Namen. Suchen Sie darunter applicationUrl. Sie werden sehen, es läuft localhost: 5000, ändern Sie es nach Belieben. und dann dotnet run ...... hurra laufen lassen


0

Ich habe das Portproblem in Net Core 3.1 mithilfe der folgenden Schritte behoben

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

Sie können mit auf die Anwendung zugreifen

http://localhost:4000

https://localhost:4001
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.