Làm cách nào để chỉ định cổng mà ứng dụng ASP.NET Core được lưu trữ trên?


191

Khi sử dụng WebHostBuildertrong một Mainđiểm vào, làm thế nào tôi có thể chỉ định cổng mà nó liên kết?

Theo mặc định, nó sử dụng 5000.

Lưu ý rằng câu hỏi này dành riêng cho API ASP.NET Core mới (hiện có trong 1.0.0-RC2).


10
kiểm tra launchSettings.jsontừ Propertiesthư mục. Bạn có thể thay đổi cổng trong launchUrl.
Oleg

@Oleg, tôi có một số cài đặt liên quan đến IIS trong phần còn lại từ mẫu dự án của RC1. Chúng không có tác dụng gì.
Drew Noakes

Người ta có thể sử dụng hosting.json(xem câu trả lời ), được sử dụng theo mặc định trong RC1 và người ta chỉ cần thêm .AddJsonFile("hosting.json", optional: true)(xem tại đây )
Oleg

1
Sử dụng ngăn xếp cấu hình có vẻ thực sự tốt hơn nhiều so với việc dựa vào một cơ chế hoàn toàn dành riêng cho VS (launchSinstall.json).
gỗ Kévin

@DrewNoakes: Tôi đã thêm câu trả lời cũ của mình với phần CẬP NHẬT 2 . Nó mô tả một số biến thể của việc thay đổi cổng mặc định và cách sử dụng hosting.jsonhoặc dòng lệnh để cấu hình liên kết.
Oleg

Câu trả lời:


233

Trong ASP.NET Core 3.1, có 4 cách chính để chỉ định một cổng tùy chỉnh:

  • Sử dụng đối số dòng lệnh, bằng cách bắt đầu ứng dụng .NET của bạn với --urls=[url]:
dotnet run --urls=http://localhost:5001/
  • Sử dụng appsettings.json, bằng cách thêm một Urlsnút:
{
  "Urls": "http://localhost:5001"
}
  • Sử dụng biến môi trường, với ASPNETCORE_URLS=http://localhost:5001/.
  • Sử dụng UseUrls(), nếu bạn thích làm điều đó theo chương trình:
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/");
            });
}

Hoặc, nếu bạn vẫn đang sử dụng trình tạo máy chủ web thay vì trình tạo máy chủ chung:

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
Theo tôi, việc sử dụng URL cố định trực tiếp trong mã không phải là lựa chọn tốt nhất.
Oleg

3
Đã thử nghiệm điều này và nó hoạt động tốt, cảm ơn. @Oleg, bạn có thể đưa ra câu trả lời cho biết bạn cần cấu hình gì không? Nó có thể là tốt để có điều này trong một tập tin cấu hình.
vẽ Noakes

4
@Oleg có thể, nhưng sử dụng UseUrlslà cách tiếp cận được đề xuất bởi nhóm ASP.NET cho các kịch bản tự lưu trữ (rõ ràng giá trị không phải được mã hóa cứng, rõ ràng). Điều đó nói rằng, tôi đã cập nhật câu trả lời của mình để đề cập đến cách bạn có thể làm điều đó bằng cách sử dụng trình xây dựng cấu hình.
gỗ Kévin

1
@Pinpoint: Tôi đã đăng câu trả lời cũ , nơi người ta có thể tìm cách thay đổi cổng bằng cách sử dụng hosting.json. Điều duy nhất, mà người ta phải làm là buộc đọc thông tin trong RC2 (xem thông báo ).
Oleg

2
Bạn sẽ cần gói sau:using Microsoft.Extensions.Configuration.CommandLine;
Người học

85

Bạn có thể chèn phần Kestrel trong tệp asp.net core 2.1+ appsinstall.json.

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

3
Cảm ơn bạn, chỉ những gì tôi cần :-) Tốt hơn UseUrls (). Thông tin chi tiết: docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/...
KTCO

7
NÀY thực sự hoạt động với nhị phân được tạo thông qua dotnet publish.
rsenna

Đây không phải là định nghĩa cổng Kestrel được liên kết với IIS (proxy) chứ không phải là cổng mà ứng dụng được lưu trữ trong IIS?
user12345

@ user12345 Trong lưu trữ IIS, Kestrel sử dụng liên kết cổng động.
menxin

1
cũng hoạt động với netcore 3.0 chạy api web từ exe, sáng chói !!!
vidriduch

57

Theo dõi câu trả lời để giúp bất cứ ai làm điều này với tích hợp docker VS. Tôi cần thay đổi sang cổng 8080 để chạy bằng môi trường "linh hoạt" trong google appengine.

Bạn sẽ cần những điều sau trong Dockerfile của bạn:

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

và bạn cũng sẽ cần sửa đổi cổng trong docker-compose.yml:

    ports:
      - "8080"

3
Cảm ơn, chúng tôi có thể đặt các biến trong lệnh windows promt theo cùng một cách: đặt ASPNETCORE_URLS = http: // *: 8080
Pavel Biryukov

1
cái này không hiệu quả với tôi bạn có chắc đây là tất cả những gì bạn sửa đổi? Bạn có cần phải làm bất cứ điều gì đặc biệt cho lời bạt hình ảnh của bạn hoặc bất cứ điều gì với docker không?
Steve

Đã quá lâu đến nỗi nó có thể đã thay đổi, nhưng nếu tôi nhớ lại đó là tất cả những gì tôi cần làm.
Casey

trong Mã VS, bạn có thể thêm "ASPNETCORE_URLS": "http: // +: 8080" trên phần "env" của launch.json, để ghi đè các cài đặt khác.
gorlok

31

Giải pháp thay thế là sử dụng một hosting.jsontrong thư mục gốc của dự án.

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

Và sau đó trong 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
Điều này đã không làm việc cho tôi. server.urls hiện là url và đảm bảo bạn thêm mục nhập vào project.json "PublishOptions": {"bao gồm": ["appsinstall.json", "web.config", "wwwroot", "hosting.json"]},
Manish Jain

3
Tôi cập nhật câu trả lời của anh ấy với tài sản chính xác urls - cảm ơn @M BiếnJain
TetraDev

30

Bạn có thể chỉ định URL lưu trữ mà không có bất kỳ thay đổi nào đối với ứng dụng của bạn.

Tạo một Properties/launchSettings.jsontệp trong thư mục dự án của bạn và điền nó với một cái gì đó như thế này:

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

dotnet runlệnh sẽ chọn launchSettings.jsontệp của bạn và sẽ hiển thị nó trong bảng điều khiển:

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. 

Thêm chi tiết: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/envirments


1
Làm việc trong appSinstall.json cũng vậy?
Paulo

Không, nó phải ở trong [ProjectRoot]/Properties/launchSettings.json, nhưng điều tuyệt vời là, nó hoạt động mà không gặp trở ngại nào.
Chaim Eliyah

5
Điều này chỉ hữu ích trong quá trình phát triển, không hoạt động với nhị phân. để sử dụng, dotnet runbạn cần truy cập vào mã nguồn.
rsenna

18

Nếu sử dụng dotnet run

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

Câu trả lời hoàn hảo! Hoạt động trong docker. Chỉ thay thế "localhost" bằng "0.0.0.0"
AndrewPt

17

Trên .net core 2.2 phương thức Hỗ trợ chính lập luận với 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>();
}

Bạn có thể xây dựng dự án của mình và binchạy lệnh như thế này

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

hoặc với nhiều url

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

bạn có thể đơn giản để sử dụng 'DotNet chạy --urls = 0.0.0.0:5001 ' trong thư mục dự án
Oudi

12

Khi được lưu trữ trong các thùng chứa docker (phiên bản linux cho tôi), bạn có thể nhận được thông báo 'Kết nối bị từ chối'. Trong trường hợp đó, bạn có thể sử dụng địa chỉ IP 0.0.0.0 có nghĩa là "tất cả địa chỉ IP trên máy này" thay vì loopback localhost để sửa lỗi chuyển tiếp cổng.

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

Ngoài ra, bạn có thể chỉ định cổng bằng cách chạy ứng dụng thông qua dòng lệnh.

Đơn giản chỉ cần chạy lệnh:

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

Lưu ý: Trong đó 5001 là cổng bạn muốn chạy.


5

Trên .Net Core 3.1, chỉ cần làm theo Microsoft Doc là khá đơn giản: kestrel-aspnetcore-3.1

Để tóm tắt:

  1. Thêm phần ConfigureService bên dưới vào CreateDefaultBuilder trên 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. Thêm cấu hình cơ bản dưới đây vào appsettings.jsontệp (thêm tùy chọn cấu hình trên bài viết của Microsoft):

    "Kestrel": {
        "EndPoints": {
            "Http": {
                "Url": "http://0.0.0.0:5002"
            }
        }
    }
  3. Mở CMD hoặc Bảng điều khiển trên thư mục nhị phân Xuất bản / Gỡ lỗi / Phát hành dự án của bạn và chạy:

    dotnet YourProject.dll
  4. Thích khám phá trang web / api của bạn tại http: // localhost: 5002


3

Đi đến property / launchSinstall.json và tìm tên ứng dụng của bạn và dưới đây, tìm applicationUrl. bạn sẽ thấy, nó đang chạy localhost: 5000, thay đổi nó thành bất cứ thứ gì bạn muốn. và sau đó chạy dotnet chạy ......


0

Tôi đã khắc phục sự cố cổng trong Net core 3.1 bằng cách sử dụng như sau

Trong Chương trình.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>(); });
}

Bạn có thể truy cập ứng dụng bằng cách sử dụng

http://localhost:4000

https://localhost:4001
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.