你需要知道的这几种 asp.net core 修改默认端口的方式

  一般情况下,aspnetcore发布后的默认端口是5000,这个大家都知道,而且默认骨架代码中没有看到任何让你输入的ip地址和端口号,但作为程序员的我们,不希望

被框架所管制,那如何实现默认端口的修改呢?

骨架代码:

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

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

发布如下:

一:解决办法1(UseUrls)

骨架代码就那么几行,很容易在这个IWebHostBuilder中找到一个叫做UseUrls的方法,从注解中可以看得出来让WebHost监听指定的端口号,截图如下:

那么答案就出来了,你需要自己来指定一下端口,改完之后截图如下:

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

但是在发布之后,你突然发现,卧槽,端口冲突了,我想换端口,tmd我还得为此再发一次程序,一个字麻烦,说一送一。差点被砍到的第一反应就是把硬编码

送到配置文件中。

二:解决办法2 (host.json)

你会突然发现要使用到的Configuration属性只能在Startup类中,毕竟在WebHost的Build之前ServiceCollection都没有初始化,哪里有统一化的配置系统呢,

那怎么办,还能怎么办,自己定义一个Configuration了,然后修改的步骤如下:

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中构建镜像

[[email protected] 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端口

[[email protected] tsweb]# docker run -d -p 8888:5000 --name a-webcore-v1 a/netcore:v1
f94c727b98d5654aa560308752c2af7cde550b6cc06c520bd438e4ccf1fa616d

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

[[email protected] 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
[[email protected] tsweb]# 

6. 解决这个问题的第一步就要看一下 容器中真的开放出来了5000端口吗,可通过docker logs 或 docker ps 查看

[[email protected] 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.
[[email protected] tsweb]# 

原来开放的是80端口哈~~~~  那就简单了,把原来的容器给删了,重新生成一个容器再映射一下就好啦。

[[email protected] tsweb]# docker rm -f b-webcore-v1
b-webcore-v1
[[email protected] tsweb]# docker run -d -p 8888:80 --name b-webcore-v1 b/netcore:v1
e58039e02740e37cc431c1176fbf586ab19b02bd9331040e4719e9d46e51627d
[[email protected] tsweb]# 

终于解决了,好了,本篇就说到这里,希望对你有帮助。

原文地址:https://www.cnblogs.com/huangxincheng/p/9569133.html

时间: 2024-10-13 03:55:27

你需要知道的这几种 asp.net core 修改默认端口的方式的相关文章

Asp.Net Core中HttpClient的使用方式

原文:Asp.Net Core中HttpClient的使用方式 在.Net Core应用开发中,调用第三方接口也是常有的事情,HttpClient使用人数.使用频率算是最高的一种了,在.Net Core中,HttpClient的使用方式随着版本的升级也发生了一些变化,本次就讲解一下Asp.Net Core2.1前后使用的两种方式. 一.原先HttpClient使用方式 一般来讲,喜欢要用的时候才会选择去获取资源,因此,当在有需求时才会用HttpClient去调用资源,便会使用如下这种方式或其它方

asp.net core 中灵活的配置方式

asp.net core支持外部文件和命令行参数方式来配置系统运行所需要的配置信息,我们从下面两个常用场景来具体说下具体使用方法. 一.监听地址及端口配置 1,命令行方式 asp.net core系统通过命令行方式启动,使用的命令如下: dotnet run 上面的命令直接在源代码目录下执行,便可以编译程序并运行.那对于已经发布好的程序,就不能使用上面的指令了,应该使用下面的指令: dotnet 程序集文件名(程序集文件名就是程序发布后生成的dll文件) 上面两个指令都能够启动应用程序.程序启动

细说ASP.NET Core静态文件的缓存方式

2016-11-26 张磊 dotNET跨平台 一.前言 我们在优化Web服务的时候,对于静态的资源文件,通常都是通过客户端缓存.服务器缓存.CDN缓存,这三种方式来缓解客户端对于Web服务器的连接请求压力的. 本文指在这三个方面,在ASP.NET Core中静态文件的实现过程和使用方法进行阐述.当然也可以考虑使用反向代理的方式(例如IIS或Nginx),这些不是本文讨论的内容. 本文重点展示如何通过StaticFileMiddleware中间件,提高网站的性能.虽然这不是唯一缓存文件的方式,我

Do you kown Asp.Net Core -- 配置Kestrel端口

Kestrel介绍 在Asp.Net Core中,我们的web application 其实是运行在Kestrel服务上,它是一个基于libuv开源的跨平台可运行 Asp.Net Core 的web服务器. 在开发阶段,我们可以直接使用Kestrel服务器用来测试,也可以使用IISExpress.在使用IISExpress其实也需要启动一个Kestrel服务器,通过IISExpress反向代理请求到Kestrel,很多时候我更喜欢使用Kestrel,因为可以实时看到log. 配置端口 在Sock

Asp.net Identity 修改默认数据库,增加自定义字段

visual studio 2013 先新建一个项目 选择MVC,确定 打开 Views\Shared\_Layout.cshtml文件,按自己的要求修改 改 [html] view plain copy print? <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> &l

Asp.Net Core 在不能使用注入方式的情况下读取配置文件

最近在用Asp.Net Core 做项目,遇到一个在不能使用注入的类中读取配置文件的问题. 大家都知道在core中推荐使用注入的方式读取配置文件,这样读取到的值是强类型的,弥补了web.config的缺陷. 当我用着正爽的时候遇到了一个静态类也需要读取配置文件的问题,纠结了几天才又了这篇博文. 最初的版本是下面这个样子 public static class ConfigurationManager { static IConfiguration Configuration; static Co

asp.net Core 配置默认

app.UseFileServer(new FileServerOptions() { FileProvider = new PhysicalFileProvider(env.ContentRootPath), RequestPath = new PathString(""), EnableDefaultFiles = true,//启用默认文件 EnableDirectoryBrowsing = false//关闭目录浏览 }); app.UseMvc(routes => {

【转】ASP.NET Core API 版本控制

几天前,我和我的朋友们使用 ASP.NET Core 开发了一个API ,使用的是GET方式,将一些数据返回到客户端 APP.我们在前端进行了分页,意味着我们将所有数据发送给客户端,然后进行一些data.length操作,以获得items count用于分页逻辑.为了减少HTTP请求的负荷,我们决定在后端(服务器端分页)实现逻辑.在我们这样的情况下,这是没有任何问题的,因为我们在客户端能快速实现.我们在客户端和服务端修改了所有逻辑,并且快速完成所有功能. 但是,您可能会有其他客户端在使用,因为只

ASP.NET Core 优雅的在开发环境保存机密(User Secrets)

前言 在应用程序开发的过程中,有的时候需要在代码中保存一些机密的信息,比如加密密钥,字符串,或者是用户名密码等.通常的做法是保存到一个配置文件中,在以前我们会把他保存到web.config中,但是在ASP.NET Core中,这一方式或许发生了改变,或者说你有更多多元化的方法, 以及更加优雅的的配置来设置或者保存这些机密资料. 起初我以为这个UserSecrets它并没有什么用,因为我有需要配置的地方我直接配置到appsetting.json文件中就可以了,直到一次开发过程中,我才感受到了它真正