ASP.NET Core设置URLs的几种方法

前言

在使用ASP.NET Core 3.1开发时,需要配置服务器监听的端口和协议,官方帮助文档进行简单说明,文档中提到了4种指定URL的方法

  1. 设置 ASPNETCORE_URLS 环境变量;
  2. 使用 dotnet --urls 命令行参数;
  3. 使用 urls作为键进行配置;
  4. 使用 UseUrls扩展方法;

为便于讲清楚URLs设置方法,创建名为 AspNetCoreUrl的ASP.NET Core Web API程序进行说明,默认情况下,启动ASP.NET Core后,监听以下URLs:

http://localhost:5000/

https://localhost:5001/

URL格式

主要有三种URL格式表达方式,可以查看官方文档(https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#url-prefixes)

格式1: {scheme}://{loopbackAddress}:{port},例如 http://localhost:5000/https://localhost:5001/

格式2: {scheme}://{IPAddress}:{port},例如 http://127.0.0.1:5000/https://192.168.1.100:5001/

格式3: {scheme}://*:{port},例如 http://*:5000/https://domain.com:5001/

[本文作者:GIS学习班] [本文链接:https://www.cnblogs.com/gyhgis/p/15517043.html]

前提条件

在开始测试几种URLs设置方法前,需要先生成 AspNetCoreUrl程序,然后在生成的根目录下打开命令行工具进行相应的测试

ASP.NET Core设置URLs的几种方法

如图,我这里的程序根目录为 D:\AspNetCoreUrl\AspNetCoreUrl\bin\Debug\netcoreapp3.1,使用的终端为微软官方的Windows PowerShell

方法1 使用环境变量

在不修改 AspNetCoreUrl任何源代码的情况下(即创建项目时的程序默认状态)生成程序,定位到生成的根目录下,打开命令行终端

ASP.NET Core设置URLs的几种方法
环境变量仅在当前命令行窗口生效
$Env:ASPNETCORE_URLS = "http://localhost:7000;https://localhost:7010"
或者使用DOTNET_URLS环境变量同样可生效
$Env:DOTNET_URLS = "http://localhost:8000;https://localhost:8010"
运行AspNetCoreUrl程序
dotnet AspNetCoreUrl.dll

如果使用Windows命令行(即cmd命令行),使用下面的方式设置

环境变量仅在当前命令行窗口生效
set ASPNETCORE_URLS=http://localhost:7000;https://localhost:7010
将ASPNETCORE_URLS变量保存到用户环境变量中
setx ASPNETCORE_URLS "http://localhost:7000;https://localhost:7010"
加/m参数,将ASPNETCORE_URLS变量保存到系统环境变量中
setx ASPNETCORE_URLS "http://localhost:7000;https://localhost:7010" /m
运行AspNetCoreUrl程序
dotnet AspNetCoreUrl.dll

注意:使用setx设置环境变量后,需要打开新的Windows命令行窗口才会使用环境变量生效

Linux系统中使用以下命令设置环境变量

环境变量仅在当前终端生效,关闭终端后需要重新设置
export ASPNETCORE_URLS="http://localhost:7000;https://localhost:7010"

方法2 使用命令行参数

在生成程序的根目录下,使用 dotnet --urls命令,并带上urls参数

dotnet AspNetCoreUrl.dll --urls "http://localhost:7001;https://localhost:7011"

ASP.NET Core设置URLs的几种方法

方法3 使用配置文件

在生成程序的根目录下,打开 appsettings.json文件,添加url配置项,然后双击 AspNetCoreUrl.exe运行

{
    "urls":"http://localhost:7002;http://localhost:7012"
}

ASP.NET Core设置URLs的几种方法

运行结果如下图

ASP.NET Core设置URLs的几种方法

方法4 使用UseUrls

这种方法需要修改源代码,打开 Program.cs文件,修改 CreateHostBuilder方法内容,主要是添加UseUrls扩展方法然后生成程序。

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup();
            // 使用UseUrls设置监听的端口和协议
            webBuilder.UseUrls("http://localhost:7003", "https://localhost:7013");
        });

ASP.NET Core设置URLs的几种方法

注意:运行前需要将 appsettings.json文件恢复到默认状态,即没有配置urls的状态,否则配置文件中设置会覆蓋代码中的方法。

方法5 使用Kestrel

这种方法并不在官方文档中,因为该方法仅限于使用Kestrel的时候生效,在创建ASP.NET Core应用程序时,默认使用Kestrel来托管应用,使用这种方法也有相应的应用场景,这里简单介绍下该方法的使用

打开 Program.cs文件,修改 CreateHostBuilder方法内容

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup();
            // 作者:GIS学习班    配置Kestrel服务
            webBuilder.UseKestrel(kestrelServerOptions =>
            {
                kestrelServerOptions.ListenLocalhost(7004);
                kestrelServerOptions.ListenLocalhost(7014, listenOptions => listenOptions.UseHttps());
            });
        });

ASP.NET Core设置URLs的几种方法

优先级

前面介绍的5种方法都在独立运行,如果将这5种方法同时用上,会有什么样的效果呢,下面来测试下,为了便于测试,每种方法都使用了不同的端口进行区分,下面显示了使用全部方法的运行结果:

ASP.NET Core设置URLs的几种方法

可以看到,生效的是使用Kestrel方法,现在将Kestrel这种注释掉,运行结果如下:

ASP.NET Core设置URLs的几种方法

可以看到此时生效的是使用命令行参数方法,如果不使用命令行参数方法,运行结果如下:

ASP.NET Core设置URLs的几种方法

生效的是配置文件中的设置,现在删除配置文件中urls的配置,运行结果如下:

ASP.NET Core设置URLs的几种方法

生效的是UseUrls扩展方法,现在注释掉UseUrls方法代码,运行结果如下:

ASP.NET Core设置URLs的几种方法

生效的是环境变量,如果不设置环境变量,则使用默认值,即 http://localhost:5000/https://localhost:5001/

总结

本文介绍了ASP.NET Core几种常用的设置URLs的方法,大家可以根据项目实际情况选择其中一种或几种,如果同时使用几种URLs设置方法,则需要留意配置的优先级问题,经过测试得出
Kestrel > 命令行 > 配置文件 > UseUrls > 环境变量 > 默认值

如果你想自己试一试,代码地址:
gitee:https://gitee.com/gyhgis/AspNetCoreUrl
github:https://github.com/gyhgis/AspNetCoreUrl

Original: https://www.cnblogs.com/gyhgis/p/15517043.html
Author: GIS学习班
Title: ASP.NET Core设置URLs的几种方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585671/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 通过示例学习PYTORCH

    核心是:PyTorch提供了两个主要的特性: 一个n维的Tensor,与Numpy相似但可以在GPU上运行 构建和训练神经网络的自动微分 我们将使用一个三阶多项式拟合 (y=sin…

    Linux 2023年6月14日
    0114
  • laravel源码分析-队列Queue

    队列 (Queue) 是 laravel 中比较常用的一个功能,队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和响应的时间。本文我们就来分析下队列创建…

    Linux 2023年6月7日
    084
  • powershell 编写的tui界面脚本《电壳别名宝》

    中文名: 《电壳别名宝》 English name: 《Power Alias》 powershell 编写的tui界面脚本。 用途:保存容易记住的别名(支持中文),保存linux…

    Linux 2023年5月27日
    0147
  • 一、Java分布式(第一章)

    单机架构:将一个项目所有的业务部署在一个服务器上,整个项目的所有服务都由这台服务器提供。单机架构的劣势已经体现出来了,当访问量越来越大,单机架构肯定撑不住。例如双十一的活动,单机架…

    Linux 2023年6月7日
    0109
  • vscode配置指南,美化技巧

    "workbench.colorCustomizations": { "editor.selectionBackground": &quot…

    Linux 2023年6月14日
    094
  • [ Tcl ] 非阻塞模式启动外部程序,并接收返回值的方法

    https://www.cnblogs.com/yeungchie/ Callback 函数 proc Callback { handle } { variable line if…

    Linux 2023年6月7日
    0102
  • Liunx-LVM创建与扩容

    LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2…

    Linux 2023年6月8日
    0104
  • 如何逃离框架孤井?

    前言 前面我发过一篇文章,脱离了Spring询问大家能不能继续开发,结果文章下面的评论和回复都告诉我大家伙的基础打得很牢固,该咋写还是咋写。看得我在这内卷的时代瞬间躺平。 那么今天…

    Linux 2023年6月13日
    0100
  • Emacs 基础offset值

    cc-mode有如下规定:One of the symbols +, -, ++, –, *, or /These special symbols describe a…

    Linux 2023年6月13日
    093
  • python学习

    python中的字符串以双引号或者单引号表示 长度为L:第一个字节索引为0或-L 最后一个字节索引为L-1或-1 in是二元关系操作,用来判断左侧内容是否在右侧的集合中 float…

    Linux 2023年6月6日
    0105
  • Docker 容器中安装 Docker

    本文讲的是在Docker中安装Ubuntu容器,然后在这个Ubuntu容器中再安装Docker。或许这样可以省下买服务器的钱,当然这只是为了学习测试使用,真正项目上还是需要买服务器…

    Linux 2023年6月14日
    0107
  • [ Skill ] 文件读写 & IO 句柄

    在 Skill 中使用一种叫做 ioport 类型的变量来操作文件。不过我一般更习惯称为 IO 句柄 (IO/File Handle)。 常用下面两个函数来获得这些 IO 句柄: …

    Linux 2023年6月7日
    0102
  • Linux三剑客命令—awk

    一、概念说明 官方概念说明: gawk – pattern scanning and processing language模式扫描和处理文件语言 AWK 是一种处理文…

    Linux 2023年5月27日
    099
  • linux inode 详解 / 线上inode爆满解决方案

    linux inode 详解 / 线上inode爆满解决方案 本文大量参考阮一峰大神博客,整理笔记 之所以&amp…

    Linux 2023年6月7日
    0119
  • docker部署安装Nginx

    docker部署安装Nginx 前言 Nginx是一个高性能的HTTP和反向代理web服务器,同事也提供了IMAP/POP3/SMTP服务。特点: 轻量级的Web服务器/反向代理服…

    Linux 2023年6月6日
    098
  • Centos部署Loki日志聚合系统

    有关一些日志聚合的起源和原则,请参阅我的另一篇文章“用于编程入门的日志聚合系统”。 [En] For the origin and principles of some log a…

    Linux 2023年5月27日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球