389 votes

Comment spécifier le port sur lequel une application ASP.NET Core est hébergée ?

Lorsque vous utilisez WebHostBuilder dans un Main comment puis-je spécifier le port auquel il se lie ?

Par défaut, il utilise 5000.

Notez que cette question est spécifique à la nouvelle API ASP.NET Core (actuellement en 1.0.0-RC2).

16 votes

Examiner launchSettings.json de Properties dossier. Vous pouvez modifier le port dans le launchUrl .

0 votes

@Oleg, j'avais quelques paramètres liés à IIS dans le modèle de projet de la RC1. Ils n'ont pas eu d'effet.

0 votes

On peut utiliser hosting.json (voir la réponse ), qui ont été utilisés par défaut dans la RC1 et il suffit d'ajouter .AddJsonFile("hosting.json", optional: true) (voir aquí )

605voto

Pinpoint Points 486

Dans ASP.NET Core 3.1, il existe 4 façons principales de spécifier un port personnalisé :

  • En utilisant des arguments de ligne de commande, en démarrant votre application .NET avec --urls=[url] :

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

  • Utilisation de appsettings.json en ajoutant un Urls nœud :

    { "Urls": "http://localhost:5001" }

  • Utilisation de variables d'environnement, avec ASPNETCORE_URLS=http://localhost:5001/ .

  • Utilisation de UseUrls() si vous préférez le faire de manière programmatique :

    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/");
            });

    }

Ou, si vous utilisez toujours le constructeur d'hôte web au lieu du constructeur d'hôte générique :

public class Program
{
    public static void Main(string[] args) =>
        new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseUrls("http://localhost:5001/")
            .Build()
            .Run();
}

69 votes

L'utilisation d'URLs fixes directement dans le code n'est pas le meilleur choix à mon avis.

4 votes

J'ai testé cela et cela fonctionne bien, merci. @Oleg, pourriez-vous étoffer votre réponse en indiquant la configuration dont vous avez besoin ? Il pourrait être bon d'avoir cela dans un fichier de configuration.

7 votes

@Oleg peut-être, mais en utilisant UseUrls est l'approche recommandée par l'équipe ASP.NET pour les scénarios d'auto-hébergement (la valeur elle-même ne doit pas être codée en dur, évidemment). Cela dit, j'ai mis à jour ma réponse pour mentionner comment vous pouvez le faire en utilisant le constructeur de configuration.

80voto

Casey Points 35

Réponse complémentaire pour aider tous ceux qui font cela avec l'intégration VS-Docker. J'ai dû changer le port 8080 pour utiliser l'environnement "flexible" dans google appengine.

Vous aurez besoin des éléments suivants dans votre Dockerfile :

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

et vous devrez également modifier le port dans docker-compose.yml :

    ports:
      - "8080"

4 votes

Merci, nous pouvons définir les variables dans le promt de commande Windows de la même manière : set ASPNETCORE_URLS=http://\*:8080

2 votes

Cela ne fonctionne pas pour moi. Êtes-vous sûr que c'est tout ce que vous avez modifié ? Avez-vous eu besoin de faire quelque chose de spécial à votre image par la suite ou quelque chose avec docker ?

0 votes

Cela fait si longtemps que ça a peut-être changé, mais si je me souviens bien, c'est tout ce que j'avais à faire.

45voto

Random Points 569

Vous pouvez spécifier l'URL d'hébergement sans aucune modification de votre application.

Créer un Properties/launchSettings.json dans le répertoire de votre projet et remplissez-le avec quelque chose comme ceci :

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

dotnet run devrait choisir votre launchSettings.json et l'affichera dans la 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. 

Plus de détails : https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments

1 votes

Travailler dans l'appSettings.json aussi ?

0 votes

Non, il faut que ce soit dans [ProjectRoot]/Properties/launchSettings.json mais ce qui est bien, c'est que ça marche sans problème.

9 votes

Ceci n'est utile que pendant le développement, et ne fonctionne pas avec les binaires. pour utiliser dotnet run vous devez avoir accès au code source.

35voto

Dennis Points 9534

La solution alternative consiste à utiliser un hosting.json dans la Racine du projet.

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

Et ensuite dans 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 votes

Cela n'a pas fonctionné pour moi. server.urls est maintenant urls et assurez-vous d'ajouter une entrée dans project.json "publishOptions" : { "include" : [ "appsettings.json", "web.config", "wwwroot", "hosting.json" ] },

3 votes

J'ai mis à jour sa réponse avec la propriété correcte urls - Merci @ManishJain

15voto

Remco Points 116

Lorsqu'il est hébergé dans des conteneurs docker (version linux pour moi), vous pouvez obtenir un message 'Connection Refused'. Dans ce cas, vous pouvez utiliser l'adresse IP 0.0.0.0 ce qui signifie "toutes les adresses IP de cette machine" au lieu de l'expression localhost loopback pour réparer le transfert de 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();
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X