asp.net core 修改默認(rèn)端口的幾種方法
一般情況下,aspnetcore發(fā)布后的默認(rèn)端口是5000,這個(gè)大家都知道,而且默認(rèn)骨架代碼中沒(méi)有看到任何讓你輸入的ip地址和端口號(hào),但作為程序員的我們,不希望
被框架所管制,那如何實(shí)現(xiàn)默認(rèn)端口的修改呢?
骨架代碼:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
發(fā)布如下:

一:解決辦法1(UseUrls)
骨架代碼就那么幾行,很容易在這個(gè)IWebHostBuilder中找到一個(gè)叫做UseUrls的方法,從注解中可以看得出來(lái)讓W(xué)ebHost監(jiān)聽(tīng)指定的端口號(hào),截圖如下:

那么答案就出來(lái)了,你需要自己來(lái)指定一下端口,改完之后截圖如下:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:8080")
.UseStartup<Startup>();
}

但是在發(fā)布之后,你突然發(fā)現(xiàn),臥槽,端口沖突了,我想換端口,tmd我還得為此再發(fā)一次程序,一個(gè)字麻煩,說(shuō)一送一。差點(diǎn)被砍到的第一反應(yīng)就是把硬編碼
送到配置文件中。
二:解決辦法2 (host.json)
你會(huì)突然發(fā)現(xiàn)要使用到的Configuration屬性只能在Startup類中,畢竟在WebHost的Build之前ServiceCollection都沒(méi)有初始化,哪里有統(tǒng)一化的配置系統(tǒng)呢,
那怎么辦,還能怎么辦,自己定義一個(gè)Configuration了,然后修改的步驟如下:
1. 新增一個(gè)host.json,名字隨便定義,自己看得懂就行啦。
{
"url": "http://*:9099"
}

2. webhost代碼修改
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("host.json")
.Build();
var url = configuration["url"];
return WebHost.CreateDefaultBuilder(args).UseUrls(configuration["url"])
.UseStartup<Startup>();
}

問(wèn)題倒是解決了,但是總發(fā)現(xiàn)有一點(diǎn)不爽,突然新來(lái)的Configration就好像半路殺出的陳咬金,所以說(shuō)如果將陳咬金收編過(guò)來(lái)就完美了。
三:不夠優(yōu)雅后的整合
接下來(lái)你很容易會(huì)在WebHostBuilder中發(fā)現(xiàn)另一個(gè)方法UseConfiguration,看參數(shù)就是用來(lái)接收ConfigurationRoot的,所以就把代碼修改如下:
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("host.json")
.Build();
//var url = configuration["url"];
return WebHost.CreateDefaultBuilder(args).UseConfiguration(configuration)
.UseStartup<Startup>();
}
但是這里有一個(gè)問(wèn)題,asp.netcore能識(shí)別我自定義的url嗎?肯定是不能識(shí)別的啦,那問(wèn)題就是,AspnetCore模式會(huì)用哪一個(gè)key作為url的地址呢??
要找到答案的話得需要從源碼上啦,從UseUrls入手吧。

從上面可以看到,UseUrls默認(rèn)是使用 WebHostDefaults.ServerUrlsKey 作為url的key的,然后繼續(xù)F12看一下它的 內(nèi)容是什么?

好了,真想大白了,原來(lái)是urls,接下來(lái)我只需要把host.json 的url改成urls就可以了,對(duì)吧。
{
"urls": "http://*:9099"
}

四:解決辦法3 (使用docker)
如果你不想做出任何改變,不想做任何退步,那沒(méi)辦法,只能把你關(guān)進(jìn)docker里啦。
1. dockerfile
FROM microsoft/dotnet:2.1-aspnetcore-runtime MAINTAINER hxc@qq.com RUN mkdir /data COPY ./publish/ /data WORKDIR /data CMD [ "dotnet","WebApplication1.dll" ]
2. publish 文件夾
在dockerfile的同級(jí)目錄下,新建一個(gè)publish文件夾用來(lái)存放當(dāng)前dll文件。

3. 通過(guò)build從dockerfile中構(gòu)建鏡像
[root@localhost tsweb]# docker build --rm -f ts.dockerfile -t a/netcore:v1 . Sending build context to Docker daemon 2.56 kB Step 1/6 : FROM microsoft/dotnet:2.1-sdk ---> bde01d9ed6eb Step 2/6 : MAINTAINER hxc@qq.com ---> Using cache ---> 3af0c3f7c416 Step 3/6 : RUN mkdir /data ---> Using cache ---> 97137ffc5449 Step 4/6 : COPY ./publish/ /data ---> Using cache ---> 77a94f1a0b8f Step 5/6 : WORKDIR /data ---> Using cache ---> 6778c2054a7b Step 6/6 : CMD dotnet WebApplication1.dll ---> Running in e4a69b32e702 ---> 9ed3a9769610 Removing intermediate container e4a69b32e702 Successfully built 9ed3a9769610
4. 最后啟動(dòng)鏡像,用8888綁定到默認(rèn)的5000端口
[root@localhost tsweb]# docker run -d -p 8888:5000 --name a-webcore-v1 a/netcore:v1 f94c727b98d5654aa560308752c2af7cde550b6cc06c520bd438e4ccf1fa616d
5. 然后你清楚的看到8888端口已經(jīng)打開(kāi)了,但是卻不能訪問(wèn),尷尬。。。
[root@localhost tsweb]# netstat -tlnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1834/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1135/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1136/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1582/master tcp6 0 0 :::3306 :::* LISTEN 2451/mysqld tcp6 0 0 :::22 :::* LISTEN 1135/sshd tcp6 0 0 ::1:631 :::* LISTEN 1136/cupsd tcp6 0 0 :::8888 :::* LISTEN 9531/docker-proxy-c tcp6 0 0 ::1:25 :::* LISTEN 1582/master [root@localhost tsweb]#

6. 解決這個(gè)問(wèn)題的第一步就要看一下 容器中真的開(kāi)放出來(lái)了5000端口嗎,可通過(guò)docker logs 或 docker ps 查看
[root@localhost tsweb]# docker logs b-webcore-v1 Hosting environment: Production Content root path: /data Now listening on: http://[::]:80 Application started. Press Ctrl+C to shut down. [root@localhost tsweb]#
原來(lái)開(kāi)放的是80端口哈~~~~ 那就簡(jiǎn)單了,把原來(lái)的容器給刪了,重新生成一個(gè)容器再映射一下就好啦。
[root@localhost tsweb]# docker rm -f b-webcore-v1 b-webcore-v1 [root@localhost tsweb]# docker run -d -p 8888:80 --name b-webcore-v1 b/netcore:v1 e58039e02740e37cc431c1176fbf586ab19b02bd9331040e4719e9d46e51627d [root@localhost tsweb]#

終于解決了,好了,本篇就說(shuō)到這里,希望對(duì)你有幫助。
以上就是asp.net core 修改默認(rèn)端口的幾種方法的詳細(xì)內(nèi)容,更多關(guān)于asp.net core 修改默認(rèn)端口的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
asp.net Gridview數(shù)據(jù)列中實(shí)現(xiàn)鼠標(biāo)懸浮變色
Gridview一般朋友們都比較常用,因?yàn)樗梢苑奖憧旖莸膶?shí)現(xiàn)我們所需的很多功能,代碼也比較簡(jiǎn)潔。平時(shí)的項(xiàng)目中這個(gè)控件我也比較常用,其中有個(gè)功能用到的頻率也比較多。所以記錄下備忘。2010-06-06
.Net Core如何對(duì)MongoDB執(zhí)行多條件查詢
這篇文章主要介紹了.Net Core如何對(duì)MongoDB執(zhí)行多條件查詢,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
.Net?Core?NPOI?導(dǎo)出多級(jí)表頭的實(shí)現(xiàn)代碼
這篇文章介紹了如何使用.NetCore和NPOI庫(kù)導(dǎo)出多級(jí)表頭的表格數(shù)據(jù),并附上了源碼,感興趣的朋友一起看看吧2024-11-11
淺談?wù)l都能看懂的單點(diǎn)登錄(SSO)實(shí)現(xiàn)方式(附源碼)
這篇文章主要介紹了淺談?wù)l都能看懂的單點(diǎn)登錄(SSO)實(shí)現(xiàn)方式(附源碼),具有一定的參考價(jià)值,有需要的可以了解一下。2016-12-12
asp.net 該行已經(jīng)屬于另一個(gè)表錯(cuò)誤的解決方法
從一個(gè)TABLE中取一行放到另一個(gè)TABLE里報(bào)錯(cuò): 該行已經(jīng)屬于另一個(gè)表。的解決辦法 用下面來(lái)個(gè)方法就OK了。2010-05-05

