当前位置: 首页 > news >正文

如何设置 ASP.NET Core 程序监听的 IP 和端口

Web 服务需要配置监听的 IP 和端口才可以对外提供真正的服务。本文介绍如何设置 ASP.NET Core 程序监听的 IP 和端口。


ASP.NET Core 程序默认集成了 Kestrel 服务器,可以直接对外提供 Web 服务。虽然可以直接提供服务,但通常建议使用反向代理服务器来间接提供服务。因此,本文建议的大多数设置监听 IP 和端口的方法都是“临时方法”,即那种“配置出来”的方法,而不会直接写死在代码中。

本文内容

    • 如何选择应该监听的 IP 和端口?
    • 配置方法
      • 方法一:直接在项目中设置
      • 方法二:使用 Kestrel 服务器的配置(不推荐)
      • 方法三:使用命令行参数指定
      • 方法四:设置环境变量

如何选择应该监听的 IP 和端口?

一般来说,监听的 IP 可以选择本地回环地址,特定的 IP 以及任意 IP,分别是:

  • 127.0.0.1 127.0.0.2 127.0.0.3…… 本地回环地址
  • 101.199.96.22 特定的 IP
  • 0.0.0.0 任意 IP

监听本地回环地址时,则访问仅限于本机应用程序,不需要管理员权限来添加防火墙配置。如果在本地计算机配置了反向代理服务器,则强烈推荐使用本地回环地址。如果打算直接让服务对外公开提供,则需要设置为 0.0.0.0 任意 IP。

一台计算机上不同的应用不能使用相同的端口,对于端口的选择只要不重复即可。如果希望让 ASP.NET Core 程序自动选择一个不重复的端口,则将其指定为 0。

配置方法

方法一:直接在项目中设置

在项目上右击属性,在调试标签下可以修改应用的启动 URL。虽然这里修改的是项目的设置,最终生成的 ASP.NET Core 程序并不会使用这个设置,但每次通过项目打开时仍然可以使用这个设置。

在项目中设置

这种方式仅仅影响调试时候采用的域名 / IP 和端口号。因此,仅在调试期间生效,待发布后,可以直接接入到反向代理服务器中。

方法二:使用 Kestrel 服务器的配置(不推荐)

直接使用 Kestrel 服务器可以在没有反向代理服务器的情况下直接对外提供 ASP.NET Core 的 Web 服务。

如果仅对外提供 http 服务,则设置非常简单:

    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
++              webBuilder.ConfigureKestrel(serverOptions =>
++              {
++                  serverOptions.Listen("0.0.0.0", 5000);
++              })
                .UseStartup<Startup>();
            });

如果希望加上 https 的支持,可以阅读我的另一篇博客:

  • 使用 Kestrel 为你的 ASP.NET Core 服务添加 https 支持

方法三:使用命令行参数指定

使用命令行参数 --urls 可以为 ASP.NET Core 程序指定监听的 URL。

dotnet ./blog.walterlv.com.exe --urls http://0.0.0.0:13800

这个 URL 中的几个信息都会用到:http 协议,监听任意 IP 地址,监听端口 13800。

通常建议为反向代理的服务选用 http,让 https 的支持交给反向代理服务器去做,参见:

  • 三种方法为 ASP.NET Core 对外服务添加 https 支持(kestrel / frp / nginx)

方法四:设置环境变量

设置环境变量 ASPNETCORE_URLS 即可为 ASP.NET Core 程序指定监听的 URL,格式与上面使用命令行参数是一样的。

注意,这里说的环境变量是单独为某一个程序设置的环境变量,而不是为用户账户或者操作系统设置的环境变量(那样显然会让所有 ASP.NET Core 程序冲突)。所以通常都是用来在反向代理服务器中配置的。


我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 收集的 Linux VPS 在线重装系统脚本
  • Linux 系统根目录下的文件夹
  • 修复 Windows 10 设置界面里面混乱的语言翻译
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • 用命令行执行 .NET 单元测试时,如何仅执行符合某些条件的单元测试
  • WPF 中如何绑定附加属性?XAML 中记得加括号,C# 中记得不能用字符串
  • VSCode:当匹配到结果时,如何一次性全部选中操作(复制 删除)?
  • Unity3D 入门:安装 Unity3D 并配置与 Visual Studio 的协作开发环境
  • 在 Visual Studio 2019 (16.5) 中查看托管线程正在等待的锁被哪个线程占用
  • 将 Windows Terminal 作为外部工具集成到其他工具 程序 代码中
  • Unity3D 入门:在 Visual Studio 里使用 Visual Studio Tools for Unity 全套工具
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • Unity3D 入门:为 Unity 的 C# 项目添加 dll 引用或安装 NuGet 包
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • 2017-09-12 前端日报
  • canvas 高仿 Apple Watch 表盘
  • ECS应用管理最佳实践
  • ES6核心特性
  • golang 发送GET和POST示例
  • gops —— Go 程序诊断分析工具
  • input的行数自动增减
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Yii源码解读-服务定位器(Service Locator)
  • zookeeper系列(七)实战分布式命名服务
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 安卓应用性能调试和优化经验分享
  • - 概述 - 《设计模式(极简c++版)》
  • 工作中总结前端开发流程--vue项目
  • 每天10道Java面试题,跟我走,offer有!
  • 浅谈web中前端模板引擎的使用
  • 使用SAX解析XML
  • 双管齐下,VMware的容器新战略
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ​Python 3 新特性:类型注解
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (四)Controller接口控制器详解(三)
  • (转)LINQ之路
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • ***检测工具之RKHunter AIDE
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET Core 和 .NET Framework 中的 MEF2
  • .Net接口调试与案例
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @Mapper作用