惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
博客园 - 【当耐特】
WordPress大学
WordPress大学
爱范儿
爱范儿
美团技术团队
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
量子位
Hugging Face - Blog
Hugging Face - Blog
B
Blog RSS Feed
Recorded Future
Recorded Future
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
博客园 - 叶小钗
GbyAI
GbyAI
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
F
Full Disclosure
G
Google Developers Blog
D
Docker
T
Tailwind CSS Blog
C
Check Point Blog
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
B
Blog
博客园 - 三生石上(FineUI控件)
博客园 - Franky
H
Help Net Security
MyScale Blog
MyScale Blog
U
Unit 42
D
DataBreaches.Net
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
L
LangChain Blog
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog

BlogFinder

日常漫步 Vol.24 之漫步前山河 - 雅余 周报 #1-聊聊本周的收获 - Edwin's Blog 我的OpenCode必装插件与Skill Write Something 掌中之物未必在掌握之中 · CRIVU PiliNara,一个更顺手的 PiliPlus 分支 「NekoEcho」:做一个必有回响的猫娘主题博客 2026-05 书影音总结 简化博客主题 - 安迪 我第一次发布 npm 包 拾花小记#45:中考前的二三事 – 小改学习志 黛西花园5月游 #18 枇杷又熟了的五月月报 一些奇奇怪怪的需求?word仿方正书版的几个小操作 - Xiobb's Blog 0419 御温泉之旅 修复了一些bug,网站基本上趋于稳定了 - 新锐博客 又回到四十年前 如何定义成功 迷鹿屋2026已重新上线 科技冰火两重天+一周回顾 ${title} 热度退了,我反而用得更深了-咕咚同学 我到底该不该换个域名? 随身WIFI折腾记 - 安迪 博客撰写体验提升——hexo pro插件 为什么不用相机把屏幕上的接关密码拍下来? 国清寺与天台山 – Ouroboros ★★★★☆《挽救计划》——久违的经济上行感 - Davidの3号基地 删除右键“打开方式”里多余选项 第三周刊_No.53|一切都会被支付两次 安卓APP通话记录与录音上传踩坑记录 - 子舒的博客 天量下跌 inBox 笔记 2.3.8,把工具栏交给了你-咕咚同学 我把小龙虾搬到了微信-咕咚同学 安好 - 响石潭 Compound Engineering Plugin:让每个工程单元都比上一个更容易 MOSS-TTS Family:开源高质量语音与声音生成模型家族深度解析 Crawl4AI:专为 LLM 设计的开源 Web 爬虫与数据抓取工具 Build Your Own X:从零实现你最喜欢的技术——程序员进阶的终极资源清单 Anthropic Skills:用文件夹教 Claude 专业技能的开源框架 1年的去月球(下) - 梅之夏 欢迎回来。 简单讲讲 ASN.1 与 OID DTV - 直播聚合客户端 5.22-5.27 – 不兴江 还没去过鸭川 – 不兴江 张晶晶同学三刷林志颖 关于我 – 不兴江 爱与嫉妒 – 不兴江 港股被持续做空 备案码花了四百块-咕咚同学 一句话生成封面:我给公众号做了4种风格的AI封面生成技能 「官」方認證 再谈费曼学习法 2026-05-28T00:34:11+08:00 2026-05-28T00:28:45+08:00 离谱的英语学习指南:基于AI的英语进阶系统方法论 iii:零集成架构的后端统一运行时 Claude Code Harness:让 Claude Code 工作有迹可循的工程化框架 Heretic:全自动移除大语言模型审查机制的开源工具 MarkItDown:微软开源的万能文档转 Markdown 利器 Harness:让 Claude Code 秒变多智能体协作工厂 这段时间尽折腾AI Agent了,确实极大地提高了效率 近期动态:两个新站点正式上线啦 误判解除!zhouayuan.com 腾讯安全申诉成功 - 周阿源|玩具设计・插画日常・生活随笔 Ralph:让 AI 编码工具自主循环跑完所有 PRD 任务的量产神器 全都违法 – 个人工作记录 关于zhouayuan.com被误判 “含违规信息” 的说明与申诉记录 - 周阿源|玩具设计・插画日常・生活随笔 小米 MiMo v2.5 Pro 白嫖 最大的人间清醒,兜里有钱,但是不花。 夜晚靓歌(12):于文文现场solo - 王志勇的Blog 今日插画:风扬起的倔强 - 周阿源|玩具设计・插画日常・生活随笔 回门习俗 独立网卡 - 忘记了回忆 500亿入股人工智能企业 从命令行到桌面智能体-咕咚同学 第一性原理读书笔记 行者微评论223-加班の守株待兔-博客|政治与时事-风雨行者 ZOZO开源物理接触求解器:GPU加速的可扩展仿真引擎 OpenStock:开源股票市场交易平台技术深度解析 MoneyPrinterTurbo:基于AI的全自动短视频生成工具深度解析 Claude-Mem:为 Claude Code 构建的持久化记忆压缩系统 Twenty:可代码化定制的企业级开源 CRM 平台技术深度解析 2026-05-26T22:59:17+08:00 企业级开源大模型部署平台 GPUStack 实战教程 1年的去月球(上) - 梅之夏 Sevalla - 静态网站托管服务 不用翻墙、不用注册、不用月费,普通人也能用上 Claude Code 装修灯具要注意⚠️ 黄梅天先锋 - 游子微博 公安备案顺利办结,站点备案全部完成 - 周阿源|玩具设计・插画日常・生活随笔 第三次兑换天猫超市卡了宗宗酱-三维狐少儿编程 Don't think, feel. - Rolen's Blog 人这一辈子,到底图个什么 博客迁移 - Edwin's Blog 情感赛道写作模板 再现本轮行情的典型特征 裁员与平常心-咕咚同学 别让“偷懒”,成为隐私泄露的破绽 片刻 - Jdeal | Life is like a Design.
ASP.NET Core:微软开源的跨平台高性能 Web 框架深度解析
Cheman · 2026-06-19 · via BlogFinder

今天在 GitHub Trending 上看到一个有意思的项目:dotnet/aspnetcore,这是微软推出的开源跨平台 Web 框架,专为云原生和现代化应用设计,支持在 Windows、macOS 和 Linux 上运行。

一、项目概述

ASP.NET Core 是微软推出的开源、跨平台 Web 框架,用于构建现代云端连接的互联网应用程序,包括 Web 应用、IoT 应用和移动后端。该项目运行在 .NET 运行时之上,采用模块化设计,具有最小开销的组件架构。

核心特性:

  • 跨平台支持:可在 Windows、macOS 和 Linux 上开发并运行
  • 开源免费:MIT 许可证,由 .NET Foundation 管理
  • 云原生设计:为云部署和本地部署提供优化的开发框架
  • 模块化架构:组件化设计,开发者可按需选择功能模块
  • 高性能:相比传统 ASP.NET 性能大幅提升,支持高并发场景

适用场景:

  • 现代 Web 应用程序(MVC、Razor Pages、Blazor)
  • RESTful API 和微服务架构
  • 实时通信应用(通过 SignalR)
  • IoT 设备后端服务
  • 跨平台移动应用后端

二、技术原理

2.1 架构设计

ASP.NET Core 采用了全新的架构设计,与传统的 ASP.NET 完全不同。其核心是请求处理管道(Request Pipeline)和中间件(Middleware)系统。

请求处理流程:

请求 → Kestrel Server → 中间件1 → 中间件2 → ... → 中间件N → 控制器/页面

从源码中的 package.json 可以看出,ASP.NET Core 采用了现代化的前端工具链:

{
  "engines": {
    "node": ">=20.9.0",
    "npm": ">=9.3.1"
  },
  "workspaces": [
    "src/SignalR/clients/ts/signalr",
    "src/SignalR/clients/ts/signalr-protocol-msgpack",
    "src/JSInterop/Microsoft.JSInterop.JS/src",
    "src/Components/dotnet-runtime-js",
    "src/Components/Web.JS/",
    "src/Components/CustomElements/src/js"
  ]
}

这表明 ASP.NET Core 深度融合了 TypeScript/JavaScript 生态,特别是:

  • SignalR TypeScript 客户端:实现实时双向通信
  • JS Interop:Blazor 与 JavaScript 互操作的基础设施
  • Web Components:Custom Elements 支持

2.2 核心技术栈

服务器端:

  • Kestrel Web Server:跨平台的高性能 Web 服务器
  • Dependency Injection:内置 IOC 容器,支持构造函数注入
  • Configuration:统一的配置系统,支持多种配置源
  • Logging:结构化日志系统
  • Hosting:通用宿主模型(Generic Host)

前端集成:

package.json 的构建配置可以看出前端工具链的选择:

{
  "devDependencies": {
    "@rollup/plugin-commonjs": "^25.0.7",
    "@rollup/plugin-node-resolve": "^15.2.3",
    "@rollup/plugin-typescript": "^11.1.5",
    "rollup": "^4.9.2",
    "typescript": "^5.3.3"
  }
}

使用 Rollup 作为打包工具,TypeScript 进行类型检查,说明项目重视前端代码的质量和性能。

2.3 关键设计模式

1. 中间件模式

ASP.NET Core 的请求处理完全基于中间件:

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

2. 依赖注入模式

几乎所有服务都通过依赖注入注册:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddDbContext<AppDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("Default")));
    services.AddScoped<IRepository, Repository>();
}

3. 选项模式(Options Pattern)

用于配置管理:

services.Configure<JwtOptions>(
    Configuration.GetSection("Jwt"));

2.4 数据流分析

以 HTTP 请求处理为例:

  1. 请求到达:Kestrel 接收 HTTP 请求
  2. 中间件管道:请求依次通过各个中间件(路由、认证、授权、CORS 等)
  3. 路由匹配:Endpoint Routing 将请求映射到对应的 Controller/Action
  4. 模型绑定:从请求中提取参数并绑定到 Action 方法的参数
  5. 过滤器执行:Authorization Filter → Action Filter → Result Filter
  6. Action 执行:执行业务逻辑
  7. 结果执行:将返回结果(View、JSON、File 等)写入响应
  8. 响应返回:通过中间件管道返回客户端

三、安装与快速开始

3.1 环境要求

  • .NET SDK:11.0 或更高版本(从 Nightly Builds 表格可以看出)
  • 操作系统:Windows 10+、macOS 12+、Linux(各主流发行版)
  • IDE(可选):Visual Studio 2022、VS Code、Rider

3.2 安装步骤

方式一:安装 .NET SDK

# macOS (使用 Homebrew)
brew install dotnet

# Windows (使用 Winget)
winget install Microsoft.DotNet.SDK.11

# Linux (Ubuntu/Debian)
sudo apt-get update
sudo apt-get install -y dotnet-sdk-11

方式二:下载 Nightly Builds

如果需要最新功能,可以下载每日构建版本(参考 README 中的表格):

3.3 最简运行示例

创建并运行 Web API 项目:

# 1. 创建项目
dotnet new webapi -n MyFirstApi
cd MyFirstApi

# 2. 运行项目
dotnet run

# 3. 访问 API
curl https://localhost:5001/weatherforecast

创建一个最小 API(Minimal API):

// Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello, ASP.NET Core!");

app.MapGet("/users/{id}", (int id) => 
    new User { Id = id, Name = "Cheman" });

app.Run();

record User(int Id, string Name);

运行:

dotnet run
# 访问 https://localhost:5001/
# 访问 https://localhost:5001/users/1

四、使用方法与实战

4.1 基础用法

构建 RESTful API:

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly IProductService _service;
    
    public ProductsController(IProductService service)
    {
        _service = service;
    }
    
    [HttpGet]
    public async Task<ActionResult<IEnumerable<Product>>> Get()
    {
        return Ok(await _service.GetAllAsync());
    }
    
    [HttpGet("{id}")]
    public async Task<ActionResult<Product>> Get(int id)
    {
        var product = await _service.GetByIdAsync(id);
        if (product == null)
            return NotFound();
        return Ok(product);
    }
    
    [HttpPost]
    public async Task<ActionResult<Product>> Post(Product product)
    {
        var created = await _service.CreateAsync(product);
        return CreatedAtAction(nameof(Get), new { id = created.Id }, created);
    }
}

4.2 进阶用法

使用 SignalR 实现实时通信:

从源码的 package.json 中可以看到 SignalR TypeScript 客户端的存在,说明 ASP.NET Core 对实时通信有完善支持。

服务器端:

// Hub 定义
public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

// 注册 Hub
app.MapHub<ChatHub>("/chat");

客户端(TypeScript):

import * as signalR from "@microsoft/signalr";

const connection = new signalR.HubConnectionBuilder()
    .withUrl("https://localhost:5001/chat")
    .build();

connection.on("ReceiveMessage", (user, message) => {
    console.log(`${user}: ${message}`);
});

await connection.start();
await connection.invoke("SendMessage", "Cheman", "Hello, SignalR!");

使用 Blazor 构建 SPA:

package.json 中的 dotnet-runtime-jsWeb.JS 可以看出 Blazor 的 JavaScript 互操作基础设施。

@page "/counter"

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

4.3 实际项目示例

微服务架构中的 API 网关:

// Program.cs
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddReverseProxy()
    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));

var app = builder.Build();

app.MapReverseProxy();

app.Run();
// appsettings.json
{
  "ReverseProxy": {
    "Routes": {
      "route1": {
        "ClusterId": "cluster1",
        "Match": {
          "PathPattern": "/api/{**catch-all}"
        }
      }
    },
    "Clusters": {
      "cluster1": {
        "Destinations": {
          "destination1": {
            "Address": "https://localhost:5002"
          }
        }
      }
    }
  }
}

五、常见问题与解决方案

5.1 安装失败

问题:安装 .NET SDK 后 dotnet 命令不可用

解决方案:

  1. 检查环境变量 PATH 是否包含 .NET 安装路径
  2. macOS/Linux: 确保 /usr/local/share/dotnet~/.dotnet 在 PATH 中
  3. Windows: 确保 C:\Program Files\dotnet\ 在 PATH 中

问题:Nightly Build 安装失败

从 README 的 Nightly Builds 表格可以看出,不同平台有不同的安装方式。确保下载正确的安装包:

  • Windows: 使用 Installer(.exe)
  • macOS/Linux: 使用 Binaries(.tar.gz)并手动解压到正确路径

5.2 运行时错误

问题:Kestrel 无法绑定端口

错误信息:Unable to bind to https://localhost:5001 on the IPv6 loopback interface

解决方案:

// Program.cs
var builder = WebApplication.CreateBuilder(args);

builder.WebHost.ConfigureKestrel(serverOptions =>
{
    serverOptions.ListenLocalhost(5001, options =>
    {
        options.UseHttps();
    });
});

var app = builder.Build();

或者修改 Properties/launchSettings.json

{
  "profiles": {
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

问题:依赖注入错误

错误信息:Unable to resolve service for type 'IXXXService'

解决方案:

确保在 ConfigureServices 中注册了服务:

// 正确注册方式
services.AddScoped<IProductService, ProductService>();

// 或使用扩展方法
services.AddScoped<IProductService, ProductService>();

5.3 性能问题

问题:响应速度慢

解决方案:

  1. 启用响应压缩
builder.Services.AddResponseCompression(options =>
{
    options.EnableForHttps = true;
});

app.UseResponseCompression();
  1. 使用 Output Caching
builder.Services.AddOutputCache();

app.UseOutputCache();

app.MapGet("/api/products", () =>
{
    // ...
}).CacheOutput();
  1. 启用 HTTP/3
builder.WebHost.ConfigureKestrel(options =>
{
    options.ConfigureEndpointDefaults(listenOptions =>
    {
        listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
    });
});

5.4 兼容性问题

问题:从 .NET 6 升级到 .NET 11 后出现兼容性问题

解决方案:

  1. 查看 Breaking Changes
  2. 更新所有 NuGet 包到最新版本
  3. 使用 .NET Upgrade Assistant 工具自动迁移
dotnet tool install -g upgrade-assistant
upgrade-assistant upgrade MyProject.csproj

六、总结

ASP.NET Core 作为微软推出的开源跨平台 Web 框架,凭借其模块化设计、高性能和强大的生态,已成为 .NET 技术栈中构建现代化应用的首选框架。

核心优势:

  1. 真正的跨平台:一套代码在 Windows、macOS、Linux 上运行
  2. 高性能:Kestrel 服务器性能优异,适合高并发场景
  3. 现代化架构:依赖注入、中间件、Minimal API 等设计符合现代开发习惯
  4. 完善的前端集成:SignalR、Blazor、TypeScript 支持完善
  5. 云原生支持:与 Azure、Docker、Kubernetes 集成无缝

适用人群:

  • 需要构建跨平台 Web 应用的 .NET 开发者
  • 希望使用 C# 进行全栈开发的工程师
  • 构建微服务架构和云原生应用的团队
  • 对性能有较高要求的企业级应用

从源码分析可以看出,ASP.NET Core 在保持高性能的同时,非常重视前端工具链的现代化(TypeScript、Rollup、Workspaces),这使得它能够很好地融入现代 Web 开发生态。

如果你正在考虑使用 .NET 技术栈构建下一个项目,ASP.NET Core 绝对值得一试。其活跃的开源社区(.NET Foundation)、完善的文档和丰富的第三方库,将大大降低开发成本,提升开发效率。

项目链接: dotnet/aspnetcore


参考文档: