• .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()
    How to insert a segment of noise to music file
    puppet practice
    Docker Commands
    LempelZiv algorithm realization
    The algorithm of entropy realization
    Java network programmingguessing game
    Deploy Openstack with RDO and Change VNC console to Spice
    puppet overview
  • 原文地址:https://www.cnblogs.com/jiyang2008/p/12858509.html
Copyright © 2020-2023  润新知