热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

asp.netcore修改默认端口的几种方法

这篇文章主要介绍了asp.netcore修改默认端口的几种方法,文中讲解非常详细,代码和图片帮助大家更好的理解,感兴趣的朋友可以了解下

  一般情况下,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();
 }

发布如下:

一:解决办法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();
 }

但是在发布之后,你突然发现,卧槽,端口冲突了,我想换端口,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();
 }

      问题倒是解决了,但是总发现有一点不爽,突然新来的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();
 }

        但是这里有一个问题,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 hxc@qq.com

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 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. 最后启动镜像,用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端口哈~~~~  那就简单了,把原来的容器给删了,重新生成一个容器再映射一下就好啦。

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

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

以上就是asp.net core 修改默认端口的几种方法的详细内容,更多关于asp.net core 修改默认端口的资料请关注其它相关文章!


推荐阅读
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 开发笔记:Docker 上安装启动 MySQL
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker上安装启动MySQL相关的知识,希望对你有一定的参考价值。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • docker增加restart=always, docker重启后自动启动容器的方法
    本文介绍了在运行docker容器时如何添加参数来保证每次docker服务重启后容器也自动重启的方法,以及如何使用命令来更新已启动的容器。 ... [详细]
  • 处理docker容器时间和宿主机时间不一致问题的方法
    本文介绍了处理docker容器时间和宿主机时间不一致问题的方法,包括复制主机的localtime到容器、处理报错情况以及重启容器的步骤。通过这些方法,可以解决docker容器时间和宿主机时间不一致的问题。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 原理:dismiss再弹出,把dialog设为全局对象。if(dialog!null&&dialog.isShowing()&&!(Activity.)isFinishing()) ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
author-avatar
不要哭开心就好_723
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有