コアは、デフォルトのポートを変更します

転送します。https://www.cnblogs.com/huangxincheng/p/9569133.html

  通常の状況下では、aspnetcore解除後、デフォルトのポートは5000で、この私たちは皆知っている、とデフォルトのスケルトンコードを使用すると、入力した任意のLETのIPアドレスとポート番号が表示されませんが、プログラマとして、私たちは望んでいません

規制の枠組みは、どのようにデフォルトのポートを変更するには?

 

スケルトンコード:

コードをコピー
    パブリッククラスプログラム
    { 
        のpublic static無効メイン(文字列[] args)
        { 
            CreateWebHostBuilder(引数).Build()を実行します()。
        } 

        パブリック静的IWebHostBuilder CreateWebHostBuilder(文字列[]引数)=> 
            WebHost.CreateDefaultBuilder(引数)
                .UseStartup <起動時>(); 
    }
コードをコピー

 

次のように公開されました:

 

A:ソリューション1(UseUrls)

       スケルトンコードそう数行、それはこのIWebHostBuilderでUseUrlsと呼ばれる方法を見つけることは容易である、注釈は、ポート番号が指定された次のスクリーンショットを聞いて作るウェブホストから見ることができます。

 

そして、答えがそこに出てきた、あなたは次のように彼のショットが何であるかをポートの後に指定する必要があります。

コードをコピー
    パブリッククラスプログラム
    { 
        のpublic static無効メイン(文字列[] args)
        { 
            CreateWebHostBuilder(引数).Build()を実行します()。
        } 

        パブリック静的IWebHostBuilder CreateWebHostBuilder(文字列[]引数)=> 
            WebHost.CreateDefaultBuilder(引数)
                   .UseUrls( "HTTP:// *:8080")
                .UseStartup <起動時>(); 
    }
コードをコピー

 

 しかし、リリース後、あなたは突然、そのFML、ポートの競合を見つけ、私はポート、TMDを変更したいと私はZaifayiciプログラム、ワードトラブルに持って、人は自由なものを得ると言います。最初の反応にはほとんどカットがハードコードされ

設定ファイルに。

 

II:ソリューション2(host.json)

       あなたは突然、どこに統一されたコンフィギュレーションシステム、初期化されませんあなたはServiceCollectionがウェブホストを構築する前に、すべての後に、唯一のスタートアップコンフィギュレーションクラスのプロパティを使用することがわかります、

 どのように行うには、だけでなく、コンフィギュレーションの独自の定義を行い、その後、次のように手順を変更する方法:

 

1.名前が何気なく自体がライン上で読むことができます定義、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>();
        }
コードをコピー

   

      问题倒是解决了,但是总发现有一点不爽,突然新来的Configration就好像半路杀出的陈咬金,所以说如果将陈咬金收编过来就完美了。

 

三:不够优雅后的整合

      接下来你很容易会在WebHostBuilder中发现另一个方法UseConfiguration,看参数就是用来接收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>();
        }
コードをコピー

 

        但是这里有一个问题,asp.netcore能识别我自定义的url吗?肯定是不能识别的啦,那问题就是,AspnetCore模式会用哪一个key作为url的地址呢??

要找到答案的话得需要从源码上啦,从UseUrls入手吧。

 

从上面可以看到,UseUrls默认是使用 WebHostDefaults.ServerUrlsKey 作为url的key的,然后继续F12看一下它的 内容是什么?

 

 

   好了,真想大白了,原来是urls,接下来我只需要把host.json 的url改成urls就可以了,对吧。

 

{
    "urls": "http://*:9099"
}

 

四:解决办法3 (使用docker)

      如果你不想做出任何改变,不想做任何退步,那没办法,只能把你关进docker里啦。

 

1. dockerfile

コードをコピー
FROM microsoft/dotnet:2.1-aspnetcore-runtime

MAINTAINER [email protected]

RUN mkdir /data

COPY ./publish/ /data

WORKDIR /data

CMD [ "dotnet","WebApplication1.dll" ]
コードをコピー

 

2. publish 文件夹

   在dockerfile的同级目录下,新建一个publish文件夹用来存放当前dll文件。

 

3. 通过build从dockerfile中构建镜像

コードをコピー
[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 [email protected]
 ---> 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. 最后启动镜像,用8888绑定到默认的5000端口

[root@localhost tsweb]# docker run -d -p 8888:5000 --name a-webcore-v1 a/netcore:v1
f94c727b98d5654aa560308752c2af7cde550b6cc06c520bd438e4ccf1fa616d

 

5. 然后你清楚的看到8888端口已经打开了,但是却不能访问,尴尬。。。

コードをコピー
[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. 解决这个问题的第一步就要看一下 容器中真的开放出来了5000端口吗,可通过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]# 

 

    オリジナルの80ポートを開放ハ~~~~それは、単純な、元の容器には、削除する、そしてどのようなJiuhaolaコンテナのマッピングを再生成します。

 

[ルート@のローカルホストtsweb]#ドッカーRM -f B-webcore-V1 
B-webcore-V1 
[ルート@ localhostのtsweb]#ドッカーラン-d 8888 -p:80 --name B-webcore-V1のB / netcore:V1 
e58039e02740e37cc431c1176fbf586ab19b02bd9331040e4719e9d46e51627d 
[ルート@ localhostののtsweb]#

   

 

  最後に解決され、ここに良い、このここで停止し、私たちはあなたを助けるために願っています。

おすすめ

転載: www.cnblogs.com/jzz228/p/11123334.html