core change the default port

Transfer: https: //www.cnblogs.com/huangxincheng/p/9569133.html

  Under normal circumstances, the default port after aspnetcore release is 5000, this we all know, and the default skeleton code does not see any let ip address and port number you enter, but as programmers we do not want

The regulatory framework is, how to change the default port that it?

 

Skeleton code:

Copy the code
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
Copy the code

 

Published as follows:

 

A: Solution 1 (UseUrls)

       Skeleton code so few lines, it is easy to find a method called UseUrls in this IWebHostBuilder, the annotation can be seen from WebHost make listening port number specified, the following screenshot:

 

Then the answer came out there, you need to specify what port After he shots are as follows:

Copy the code
    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>();
    }
Copy the code

 

 But after the release, you suddenly find that FML, port conflicts, and I want to change the port, tmd and I have to Zaifayici program, a word trouble, say one get one free. Cut almost to the first reaction is hardcoded

To the configuration file.

 

II: Solution 2 (host.json)

       You will suddenly find that you want to use the property only in the Startup Configuration class, after all, before the ServiceCollection Build WebHost are not initialized, where it unified configuration system,

 How to do, but also how to do their own definition of a Configuration, and then modify the steps as follows:

 

1. Add a host.json, name casually define themselves can read on the line.

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

 

2. webhost代码修改

 

Copy the code
        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>();
        }
Copy the code

   

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

 

三:不够优雅后的整合

      接下来你很容易会在WebHostBuilder中发现另一个方法UseConfiguration,看参数就是用来接收ConfigurationRoot的,所以就把代码修改如下:

Copy the code
        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>();
        }
Copy the code

 

        但是这里有一个问题,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

Copy the code
FROM microsoft/dotnet:2.1-aspnetcore-runtime

MAINTAINER [email protected]

RUN mkdir /data

COPY ./publish/ /data

WORKDIR /data

CMD [ "dotnet","WebApplication1.dll" ]
Copy the code

 

2. publish 文件夹

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

 

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

Copy the code
[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
Copy the code

 

4. 最后启动镜像,用8888绑定到默认的5000端口

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

 

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

Copy the code
[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]# 
Copy the code

 

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]# 

 

    The original open port 80 Ha ~ ~ ~ ~ it simple, the original container to be deleted, and then re-generate a mapping of what Jiuhaola container.

 

[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]# 

   

 

  Finally resolved, good herein, this stop here, we hope to help you.

Guess you like

Origin www.cnblogs.com/jzz228/p/11123334.html