京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2684|回复: 0

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

[复制链接]

17

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2021-12-2 06:54:37 | 显示全部楼层 |阅读模式 来自 中国
目录% o, E* }6 t4 s

) ?7 N9 Q, r9 T% z6 w
    / ^9 N5 y! O7 c3 A
  • 前言
    0 b$ T" t) J2 F$ L4 E4 C, X! B
  • URL格式
    3 Z7 A% A. C% k
  • 前提条件
    0 n! V/ l7 O9 w8 q1 @3 w) K
  • 方法1 使用环境变量
      a" H# O  _  {: z5 s
  • 方法2 使用命令行参数( V& n5 ]+ l& C; K$ S4 Y
  • 方法3 使用配置文件
    $ j2 t  `/ B) R" w; |$ |. f' Z
  • 方法4 使用UseUrls. B7 c0 ?* K; O2 F, L
  • 方法5 使用Kestrel* i* J5 j; m, v- O7 h- {
  • 优先级+ ?' x( k# a. p6 y' I4 L3 R! B
  • 总结
    6 @- s2 F/ D% k+ U% W

0 H% T2 W" w, u1 W+ g: O8 b; f- K6 m' i前言3 `- O9 o* C9 Y( a# D
( ]$ H5 w. E, r1 [& D& Q7 q
在使用ASP.NET Core 3.1开发时,需要配置服务器监听的端口和协议,官方帮助文档进行简单说明,文档中提到了4种指定URL的方法
$ I, v8 O4 X2 y: L, Z, ]
        5 E: |4 {6 r3 O' L; F" J- j
  • 设置ASPNETCORE_URLS 环境变量;    % j6 f( _$ |, t# x9 k. F0 [
  • 使用dotnet --urls 命令行参数;    % M9 Q# S; z- R6 ?- w9 ?
  • 使用urls作为键进行配置;    & _/ m* f) Z  x4 W
  • 使用UseUrls扩展方法;+ M' I0 ~* D" L' q1 f
为便于讲清楚URLs设置方法,创建名为AspNetCoreUrl的ASP.NET Core Web API程序进行说明,默认情况下,启动ASP.NET Core后,监听以下URLs:
! c( e& f0 t% ]! n7 y+ O7 K
​http://localhost:5000/* ~% n; S: V! A
​https://localhost:5001/
3 J0 x* r1 Z" K* B/ m) o

* S; ^! T3 O2 m/ I0 HURL格式2 _# Y* n: P1 c4 @3 h( L4 Z+ Z
9 O' X% U6 Y! B( j1 Y7 o
主要有三种URL格式表达方式,可以查看官方文档(https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1)4 g1 w1 S' ~& h  q8 j' T
格式1:{scheme}://{loopbackAddress}:{port},例如http://localhost:5000/、https://localhost:5001/! R" x3 ~  \4 k7 [! Y- x
格式2:{scheme}://{IPAddress}:{port},例如http://127.0.0.1:5000/、https://192.168.1.100:5001/
1 q9 \8 O4 y3 h! y% v: Y% h格式3:{scheme}://*:{port},例如http://*:5000/、https://domain.com:5001/0 X# r2 x4 S' v: I/ u5 u) U

- {& u2 p! U0 a" ~7 T前提条件, n9 W7 c8 S; B6 O+ O- {, Z
8 N/ h4 z3 ^! V+ w, x% J
在开始测试几种URLs设置方法前,需要先生成AspNetCoreUrl程序,然后在生成的根目录下打开命令行工具进行相应的测试* V" e& {4 e( Y9 Z8 Z+ [; K
; g4 y  e, v: Z$ g1 H2 g5 m* y
如图,我这里的程序根目录为D:\AspNetCoreUrl\AspNetCoreUrl\bin\Debug\netcoreapp3.1,使用的终端为微软官方的Windows PowerShell. t9 ^8 Q, Q* U& m

  K; ^. P, k, Y! K, o9 u/ C方法1 使用环境变量. [* y0 L) _8 e7 [8 c

6 ^. t5 Z  f1 x+ r0 f( a  {在不修改AspNetCoreUrl任何源代码的情况下(即创建项目时的程序默认状态)生成程序,定位到生成的根目录下,打开命令行终端: s- U0 A& ~) {# l) g( h* T
  1. # 环境变量仅在当前命令行窗口生效$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命令行),使用下面的方式设置
  1. # 环境变量仅在当前命令行窗口生效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命令行窗口才会使用环境变量生效
% J1 m# Z# \2 p9 f6 p+ o  G' K在Linux系统中使用以下命令设置环境变量
  1. # 环境变量仅在当前终端生效,关闭终端后需要重新设置export ASPNETCORE_URLS=http://localhost:7000;https://localhost:7010
复制代码
方法2 使用命令行参数6 [* y$ W$ L8 i- }8 T

7 Q7 f4 ?" [; d9 ^) |在生成程序的根目录下,使用dotnet --urls命令,并带上urls参数
  1. dotnet AspNetCoreUrl.dll --urls http://localhost:7001;https://localhost:7011
复制代码
: @: o* Z' v* O, z7 u
7 Q4 N& W- M- W" ]- u- T
方法3 使用配置文件
+ ^# Q/ s9 l* s$ R
( [1 n% }: b# a* z在生成程序的根目录下,打开appsettings.json文件,添加url配置项,然后双击AspNetCoreUrl.exe运行
  1. {    "urls":"http://localhost:7002;http://localhost:7012"}
复制代码
) f) ^6 q5 z, S7 b+ k% S7 |
运行结果如下图7 L# X3 q: H* x! x

: \* P7 c2 }9 m, W9 A
  v: n& {  [" V6 m方法4 使用UseUrls
& ]+ h4 ]0 ^: X  k! E" p. s) z: V7 N1 s
这种方法需要修改源代码,打开Program.cs文件,修改CreateHostBuilder方法内容,主要是添加UseUrls扩展方法然后生成程序。
  1. public static IHostBuilder CreateHostBuilder(string[] args) =>    Host.CreateDefaultBuilder(args)        .ConfigureWebHostDefaults(webBuilder =>        {            webBuilder.UseStartup();            // 使用UseUrls设置监听的端口和协议            webBuilder.UseUrls("http://localhost:7003", "https://localhost:7013");        });
复制代码

5 T" M" X1 z7 _; O( P注意:运行前需要将appsettings.json文件恢复到默认状态,即没有配置urls的状态,否则配置文件中设置会覆蓋代码中的方法。
4 w- `+ k# g0 L# f2 [" B+ Y) o
$ M/ j& r2 V% }) i方法5 使用Kestrel% N( a; Y! a" j& m  o

+ M3 [* ]. Y: `这种方法并不在官方文档中,因为该方法仅限于使用Kestrel的时候生效,在创建ASP.NET Core应用程序时,默认使用Kestrel来托管应用,使用这种方法也有相应的应用场景,这里简单介绍下该方法的使用% v! {; K0 l" G& N  M+ P
打开Program.cs文件,修改CreateHostBuilder方法内容
  1. public static IHostBuilder CreateHostBuilder(string[] args) =>    Host.CreateDefaultBuilder(args)        .ConfigureWebHostDefaults(webBuilder =>        {            webBuilder.UseStartup();            // 配置Kestrel服务            webBuilder.UseKestrel(kestrelServerOptions =>            {                kestrelServerOptions.ListenLocalhost(7004);                kestrelServerOptions.ListenLocalhost(7014, listenOptions => listenOptions.UseHttps());            });        });
复制代码

! P6 f/ }, Y; o& U, S( H3 H" r3 G" S' }
优先级! q2 \& m4 I' \, X7 v  Z0 J
0 s( m5 J4 ]  a/ ~
前面介绍的5种方法都在独立运行,如果将这5种方法同时用上,会有什么样的效果呢,下面来测试下,为了便于测试,每种方法都使用了不同的端口进行区分,下面显示了使用全部方法的运行结果:5 q% m5 U4 Y" P, {5 B
8 E7 A: Z! B3 I# Z+ y9 x
可以看到,生效的是使用Kestrel方法,现在将Kestrel这种注释掉,运行结果如下:
8 R; X7 E0 K" \) `+ N/ }; q. S
# f$ W5 D3 p: F
可以看到此时生效的是使用命令行参数方法,如果不使用命令行参数方法,运行结果如下:
% O( L5 W% @$ G0 g
. ~. D  t9 e! Y& ^1 s
生效的是配置文件中的设置,现在删除配置文件中urls的配置,运行结果如下:
) p( H( D! [; w- @: T1 `" e

  s: B5 u4 g+ n0 L% X, x- v生效的是UseUrls扩展方法,现在注释掉UseUrls方法代码,运行结果如下:# R' F3 N. p# N
2 R$ |) R) p1 |& X  g7 ~
生效的是环境变量,如果不设置环境变量,则使用默认值,即http://localhost:5000/和https://localhost:5001/。" L+ X. b. v1 L0 W/ }1 [4 P2 c

: i+ D* o4 @* J4 u# @总结! @7 [# I$ m* }; K4 [

7 f$ ^: m; n6 J5 l0 a本文介绍了ASP.NET Core几种常用的设置URLs的方法,大家可以根据项目实际情况选择其中一种或几种,如果同时使用几种URLs设置方法,则需要留意配置的优先级问题,经过测试得出/ j) Z: @; S2 s" H5 q
Kestrel > 命令行 > 配置文件 > UseUrls > 环境变量 > 默认值8 v" O7 I* D6 i4 i. i: d
如果你想自己试一试,代码地址:
# c0 @. t0 A* M3 y# pgitee:https://gitee.com/gyhgis/AspNetCoreUrl
  x5 `/ i7 o) M/ G2 |0 d  Ngithub:https://github.com/gyhgis/AspNetCoreUrl
. U# U/ \* a( v5 M到此这篇关于ASP.NET Core设置URLs的五种方法的文章就介绍到这了,更多相关ASP.NET Core设置URLs 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
: |6 v$ R* A) X% @1 T% Z8 y. B- B' K- `6 v: k; \# Y) c6 r: o
来源:http://www.jb51.net/article/228683.htm8 v# f- s* h+ H' O
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

帖子地址: 

梦想之都-俊月星空 优酷自频道欢迎您 http://i.youku.com/zhaojun917
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2026-3-24 11:39 , Processed in 0.037947 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表