zoukankan      html  css  js  c++  java
  • .net core修改默认端口的方式

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

    但是在发布之后,你突然发现,卧槽,端口冲突了,我想换端口,还得为此再发一次程序,一个字麻烦。

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

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

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

    1. 新增一个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就好像半路杀出的陈咬金,所以说如果将陈咬金收编过来就完美了。

    3.不够优雅后的整合

    接下来你很容易会在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"
    }

    4.解决办法4(使用docker)

    如果你不想做出任何改变,不想做任何退步,那没办法,只能把你关进docker里啦(通过端口映射)。

    详细之前博文有提到过,可以前去查看,这里不再复述。传送门

    PS:以上参考代码是基于.netcore2版本,.netcore3略有差异,请根据自己所用版本修改。

    .net core2

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseKestrel()
        .UseUrls("http://*:8093", "https://*:5001");

    .net core3

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
                webBuilder.UseKestrel();
                webBuilder.UseUrls("http://*:44396", "https://*:44392");
            });

    区别不大但要注意3.0用了lamdba的

    转载自:引用部分1传送门引用部分2传送门

  • 相关阅读:
    2. 环形路加油
    1. 元素累加
    开始在线练习50题。
    C# 搜索关键词
    Python调用OpenCV几何变换
    Tensorflow加载多幅图像进一个tensor
    Cmake构建OpenCV测试例子
    Linux利用本地http下载解决一些需要联网下载的问题
    Python调用OpenCV算术操作
    Python调用OpenCV阈值化
  • 原文地址:https://www.cnblogs.com/jiyang2008/p/12858509.html
Copyright © 2011-2022 走看看