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.