เมื่อใช้WebHostBuilder
ในจุดMain
เข้าใช้งานฉันจะระบุพอร์ตที่เชื่อมกับได้อย่างไร
โดยค่าเริ่มต้นจะใช้ 5,000
โปรดทราบว่าคำถามนี้เฉพาะกับ ASP.NET Core API ใหม่ (ปัจจุบันอยู่ใน 1.0.0-RC2)
hosting.json
หรือบรรทัดคำสั่งสำหรับการกำหนดค่าของการผูก
เมื่อใช้WebHostBuilder
ในจุดMain
เข้าใช้งานฉันจะระบุพอร์ตที่เชื่อมกับได้อย่างไร
โดยค่าเริ่มต้นจะใช้ 5,000
โปรดทราบว่าคำถามนี้เฉพาะกับ ASP.NET Core API ใหม่ (ปัจจุบันอยู่ใน 1.0.0-RC2)
hosting.json
หรือบรรทัดคำสั่งสำหรับการกำหนดค่าของการผูก
คำตอบ:
ใน ASP.NET Core 3.1 มี 4 วิธีหลักในการระบุพอร์ตแบบกำหนดเอง:
--urls=[url]
:dotnet run --urls=http://localhost:5001/
appsettings.json
โดยการเพิ่มUrls
โหนด:{
"Urls": "http://localhost:5001"
}
ASPNETCORE_URLS=http://localhost:5001/
การใช้ตัวแปรสภาพแวดล้อมด้วยUseUrls()
ถ้าคุณชอบทำมันโดยทางโปรแกรม: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/");
});
}
หรือหากคุณยังคงใช้ตัวสร้างเว็บโฮสต์แทนตัวสร้างโฮสต์ทั่วไป:
public class Program
{
public static void Main(string[] args) =>
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseUrls("http://localhost:5001/")
.Build()
.Run();
}
UseUrls
เป็นแนวทางที่ทีม ASP.NET แนะนำให้ใช้สำหรับการโฮสต์ด้วยตนเอง (ค่าตัวเองนั้นไม่จำเป็นต้องเป็นรหัสที่ชัดเจน) ที่กล่าวว่าฉันปรับปรุงคำตอบของฉันที่จะพูดถึงวิธีที่คุณสามารถทำได้โดยใช้เครื่องมือสร้างการกำหนดค่า
using Microsoft.Extensions.Configuration.CommandLine;
คุณสามารถแทรกส่วน Kestrel ในไฟล์ asp.net core 2.1+ appsettings.json
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://0.0.0.0:5002"
}
}
},
dotnet publish
นี้ใช้งานได้จริงกับไบนารีที่สร้างผ่าน
ติดตามคำตอบเพื่อช่วยให้ทุกคนทำสิ่งนี้ด้วยการรวม VS docker ฉันต้องการเปลี่ยนเป็นพอร์ต 8080 เพื่อให้ทำงานได้โดยใช้สภาพแวดล้อม "ยืดหยุ่น" ใน google appengine
คุณจะต้องใช้สิ่งต่อไปนี้ใน Dockerfile ของคุณ:
ENV ASPNETCORE_URLS=http://+:8080
EXPOSE 8080
และคุณจะต้องแก้ไขพอร์ตใน docker-compose.yml เช่นกัน:
ports:
- "8080"
ทางเลือกอื่นคือใช้hosting.json
ในรูทของโครงการ
{
"urls": "http://localhost:60000"
}
และจากนั้นค่ะ 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();
}
urls
- ขอบคุณ @ManishJain
คุณสามารถระบุ URL การโฮสต์โดยไม่มีการเปลี่ยนแปลงแอปของคุณ
สร้างProperties/launchSettings.json
ไฟล์ในไดเรกทอรีโครงการของคุณและเติมลงในบางสิ่งเช่นนี้:
{
"profiles": {
"MyApp1-Dev": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:5001/"
}
}
}
dotnet run
คำสั่งควรเลือกlaunchSettings.json
ไฟล์ของคุณและจะแสดงในคอนโซล:
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.
รายละเอียดเพิ่มเติม: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environment
[ProjectRoot]/Properties/launchSettings.json
แต่สิ่งที่สวยงามคือมันทำงานได้โดยไม่ต้องผูกปม
dotnet run
คุณจำเป็นต้องเข้าถึงซอร์สโค้ด
หากใช้งาน dotnet run
dotnet run --urls="http://localhost:5001"
ข้างต้น. net core 2.2 วิธีการสนับสนุนหลัก args กับ 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>();
}
คุณสามารถสร้างโครงการของคุณและไปbin
เรียกใช้คำสั่งเช่นนี้
dotnet <yours>.dll --urls=http://localhost:5001
หรือมีหลาย URL
dotnet <yours>.dll --urls="http://localhost:5001,https://localhost:5002"
เมื่อโฮสต์ในคอนเทนเนอร์นักเทียบท่า (เวอร์ชั่นสำหรับ linux สำหรับฉัน) คุณอาจได้รับข้อความ 'ปฏิเสธการเชื่อมต่อ' ในกรณีดังกล่าวคุณสามารถใช้ที่อยู่ IP 0.0.0.0ซึ่งหมายถึง "ที่อยู่ IP ทั้งหมดในเครื่องนี้" แทนlocalhost loopback เพื่อแก้ไขการส่งต่อพอร์ต
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();
}
}
หรือคุณสามารถระบุพอร์ตโดยเรียกใช้แอปผ่านบรรทัดคำสั่ง
เพียงแค่เรียกใช้คำสั่ง:
dotnet run --server.urls http://localhost:5001
หมายเหตุ: ที่ 5001 คือพอร์ตที่คุณต้องการรัน
บน. Net Core 3.1 เพียงทำตาม Microsoft Doc ว่ามันค่อนข้างง่าย: kestrel-aspnetcore-3.1
เพื่อสรุป:
เพิ่มส่วน ConfigureServices ด้านล่างเพื่อ CreateDefaultBuilder เมื่อ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>();
});
เพิ่มการกำหนดค่าพื้นฐานด้านล่างลงในappsettings.json
ไฟล์ (ตัวเลือกการกำหนดค่าเพิ่มเติมในบทความของ Microsoft):
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://0.0.0.0:5002"
}
}
}
เปิด CMD หรือคอนโซลในโฟลเดอร์โครงการเผยแพร่ / Debug / Release ไบนารีของคุณและเรียกใช้:
dotnet YourProject.dll
เพลิดเพลินกับการสำรวจไซต์ / API ของคุณได้ที่http: // localhost: 5002
ไปที่ Properties / launchSettings.json และค้นหาชื่อแอปของคุณและค้นหา appUrl คุณจะเห็นมันกำลังรัน localhost: 5000 เปลี่ยนเป็นอะไรก็ได้ที่คุณต้องการ แล้วเรียกใช้ dotnet run ...... hurray
ฉันแก้ไขปัญหาพอร์ตใน Net core 3.1 โดยใช้สิ่งต่อไปนี้
ใน 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>(); });
}
คุณสามารถเข้าถึงแอปพลิเคชันโดยใช้
http://localhost:4000
https://localhost:4001
launchSettings.json
จากProperties
โฟลเดอร์launchUrl
คุณสามารถเปลี่ยนพอร์ตในส่วน