You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 7 Web应用替换localhost为本地IP后无法访问的问题排查

.NET 7 Web应用无法通过本地IP被局域网设备访问的解决方法

一、修复中间件顺序与终端中间件问题

你的代码存在两个关键问题:

  • app.Run()是终端中间件,调用后后续的app.UseEndpoints()永远不会执行;且UseCors位置错误,CORS中间件必须在授权和路由配置之前加载。
  • 绑定固定IP不够灵活,改用0.0.0.0可监听所有网络接口,适配本地IP变化。

修改后的代码:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
// 先注册CORS服务
builder.Services.AddCors();

var app = builder.Build();

app.UseHttpsRedirection();
// CORS中间件必须放在UseAuthorization和路由之前
app.UseCors(policy => policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());
app.UseAuthorization();

// 只需要一次路由配置,无需重复
app.MapControllers();

// 监听所有网络接口的9111端口
app.Run("https://0.0.0.0:9111");

二、解决HTTPS证书问题

本地开发证书默认仅包含localhost和127.0.0.1,绑定局域网IP时会触发SSL握手失败,这是Postman报socket hang up的核心原因。有两种解决方式:

1. 临时改用HTTP调试(仅开发环境)

如果只是测试局域网访问,可暂时绕过HTTPS:

  • 注释掉app.UseHttpsRedirection();
  • 修改app.Run地址为:
app.Run("http://0.0.0.0:9111");

2. 生成包含局域网IP的信任证书(保留HTTPS)

  • 打开命令行执行以下命令生成证书:
dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\YourAppName.pfx -p YourCustomPassword
dotnet dev-certs https --trust
  • 在appsettings.json中添加证书配置:
{
  "Kestrel": {
    "Endpoints": {
      "Https": {
        "Url": "https://0.0.0.0:9111",
        "Certificate": {
          "Path": "C:\\Users\\YourUserName\\.aspnet\\https\\YourAppName.pfx",
          "Password": "YourCustomPassword"
        }
      }
    }
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

注意替换YourAppName、YourCustomPassword和证书路径为实际值。

三、检查防火墙与端口占用

  • 确保Windows防火墙(或第三方防火墙)允许应用通过9111端口通信,可临时关闭防火墙测试。
  • 检查9111端口是否被占用:
netstat -ano | findstr :9111

若被占用,更换端口或结束占用进程。

内容的提问来源于stack exchange,提问作者tyinde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:42:22