Come specificare la porta su cui è ospitata un'applicazione ASP.NET Core?


198

Quando si utilizza WebHostBuilderin un Mainpunto di ingresso, come posso specificare la porta a cui si lega?

Di default usa 5000.

Questa domanda è specifica per la nuova API ASP.NET Core (attualmente in 1.0.0-RC2).


10
esaminare launchSettings.jsondalla Propertiescartella. È possibile modificare la porta in launchUrl.
Oleg,

@Oleg, avevo alcune impostazioni relative a IIS lasciate lì dal modello di progetto di RC1. Non hanno avuto alcun effetto.
Drew Noakes,

Si può usare hosting.json(vedi la risposta ), che sono stati usati di default in RC1 e basta aggiungere .AddJsonFile("hosting.json", optional: true)(vedi qui )
Oleg

1
Usare lo stack di configurazione sembra davvero molto meglio che fare affidamento su un meccanismo puramente specifico di VS (launchSettings.json).
Kévin Chalet

@DrewNoakes: ho aggiunto la mia vecchia risposta con la parte AGGIORNATA 2 . Descrive alcune varianti della modifica della porta predefinita e dell'uso hosting.jsono della riga di comando per la configurazione dell'associazione.
Oleg,

Risposte:


247

In ASP.NET Core 3.1, ci sono 4 modi principali per specificare una porta personalizzata:

  • Utilizzando gli argomenti della riga di comando, avviando l'applicazione .NET con --urls=[url]:
dotnet run --urls=http://localhost:5001/
  • Utilizzando appsettings.json, aggiungendo un Urlsnodo:
{
  "Urls": "http://localhost:5001"
}
  • Utilizzando le variabili di ambiente, con ASPNETCORE_URLS=http://localhost:5001/.
  • Usando UseUrls(), se preferisci farlo a livello di codice:
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/");
            });
}

Oppure, se stai ancora utilizzando il generatore di host Web anziché il generatore di host generico:

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
A mio avviso, l'utilizzo di URL fissi direttamente nel codice non è la scelta migliore.
Oleg,

3
Ho provato questo e funziona bene, grazie. @Oleg, potresti trovare una risposta che mostri di quale configurazione hai bisogno? Potrebbe essere utile averlo in un file di configurazione.
Drew Noakes,

4
@Oleg forse, ma l'utilizzo UseUrlsè l'approccio raccomandato dal team ASP.NET per scenari di self-hosting (il valore stesso non deve essere codificato, ovviamente). Detto questo, ho aggiornato la mia risposta per menzionare come è possibile farlo utilizzando il builder di configurazione.
Kévin Chalet

1
@Pinpoint: ho pubblicato la vecchia risposta , dove è possibile trovare come cambiare la porta usando hosting.json. L'unica cosa che si deve fare è forzare la lettura delle informazioni in RC2 (vedere l'annuncio ).
Oleg,

2
Avrai bisogno del seguente pacchetto:using Microsoft.Extensions.Configuration.CommandLine;
Studente

89

Puoi inserire la sezione Kestrel nel file aspett di base 2.1+ appsettings.json.

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

3
Grazie, proprio quello di cui avevo bisogno :-) Meglio di UseUrls (). Maggiori dettagli: docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/…
KTCO

7
Questo funziona effettivamente con i binari generati attraverso dotnet publish.
rsenna,

Non sta definendo la porta che Kestrel è associato a IIS (proxy) piuttosto che alla porta su cui è ospitata l'app in IIS?
user12345

@ user12345 Nell'hosting IIS, Kestrel utilizza l'associazione dinamica delle porte.
menxin,

1
funziona anche con netcore 3.0 in esecuzione web api da exe, brillante !!!
Vidriduch,

58

Risposta di follow-up per aiutare chiunque lo faccia con l'integrazione della finestra mobile VS. Ho dovuto passare alla porta 8080 per funzionare utilizzando l'ambiente "flessibile" in Google Appengine.

È necessario quanto segue nel Dockerfile:

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

e dovrai anche modificare la porta in docker-compose.yml:

    ports:
      - "8080"

3
Grazie, possiamo impostare le variabili nel comando di Windows allo stesso modo: impostare ASPNETCORE_URLS = http: // *: 8080
Pavel Biryukov

1
questo non funziona per me. sei sicuro che sia tutto ciò che hai modificato? Hai dovuto fare qualcosa di speciale per le tue parole d'immagine o qualcosa con la finestra mobile?
Steve,

È passato così tanto tempo che potrebbe essere cambiato, ma se ricordo che era tutto ciò che dovevo fare.
Casey,

nel codice VS, è possibile aggiungere "ASPNETCORE_URLS": "http: // +: 8080" nella sezione "env" di launch.json, per sovrascrivere altre impostazioni.
Gorlok,

31

La soluzione alternativa è quella di utilizzare a hosting.jsonnella radice del progetto.

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

E poi dentro 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
Questo non ha funzionato per me. server.urls ora è urls e assicurati di aggiungere la voce a project.json "publishingOptions": {"include": ["appsettings.json", "web.config", "wwwroot", "hosting.json"]},
Manish Jain,

3
Ho aggiornato la sua risposta con la proprietà corretta urls- grazie @ManishJain
TetraDev il

30

Puoi specificare l'URL di hosting senza alcuna modifica alla tua app.

Crea un Properties/launchSettings.jsonfile nella directory del tuo progetto e riempilo con qualcosa del genere:

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

dotnet runil comando dovrebbe scegliere il tuo launchSettings.jsonfile e lo visualizzerà nella console:

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. 

Maggiori dettagli: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments


1
Lavori anche su appSettings.json?
Paulo,

No, deve esserci [ProjectRoot]/Properties/launchSettings.json, ma la cosa bella è che funziona senza intoppi.
Chaim Eliyah,

5
Questo è utile solo durante lo sviluppo, non funziona con i binari. per poter utilizzare dotnet runè necessario accedere al codice sorgente.
rsenna,

18

Se si utilizza dotnet run

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

La risposta perfetta! Funziona nella finestra mobile. Sostituito solo "localhost" con "0.0.0.0"
AndrewPt

17

Sopra .net core 2.2 il metodo Main support args con 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>();
}

Puoi costruire il tuo progetto e andare a bineseguire il comando in questo modo

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

o con più URL

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

puoi semplicemente usare 'dotnet run --urls = 0.0.0.0:5001 ' nella directory del progetto
oudi

12

Se ospitato in contenitori docker (versione Linux per me), potresti ricevere un messaggio "Connessione rifiutata". In tal caso è possibile utilizzare l'indirizzo IP 0.0.0.0 che significa "tutti gli indirizzi IP su questa macchina" anziché il loopback localhost per correggere il port forwarding.

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

In alternativa, puoi specificare la porta eseguendo l'app dalla riga di comando.

Esegui semplicemente il comando:

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

Nota: dove 5001 è la porta su cui si desidera eseguire.


5

Su .Net Core 3.1 basta seguire Microsoft Doc che è abbastanza semplice: kestrel-aspnetcore-3.1

Riassumere:

  1. Aggiungi la seguente sezione ConfigureServices a CreateDefaultBuilder su 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. Aggiungi la seguente configurazione di base al appsettings.jsonfile (più opzioni di configurazione nell'articolo di Microsoft):

    "Kestrel": {
        "EndPoints": {
            "Http": {
                "Url": "http://0.0.0.0:5002"
            }
        }
    }
  3. Apri CMD o Console nella cartella dei file di pubblicazione / debug / rilascio del progetto ed esegui:

    dotnet YourProject.dll
  4. Divertiti a esplorare il tuo sito / api sul tuo http: // localhost: 5002


3

Vai su properties / launchSettings.json e trova il tuo nome app e sotto questo, trova applicationUrl. vedrai che sta eseguendo localhost: 5000, modificalo come preferisci. e poi esegui dotnet corri ...... evviva


0

Ho risolto il problema delle porte in Net core 3.1 usando il comando seguente

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

Puoi accedere all'applicazione usando

http://localhost:4000

https://localhost:4001
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.