1998年微软推出ASP技术时,我正在大学计算机实验室第一次接触动态网页开发。那个年代,静态HTML页面需要手动更新每个文件,而ASP的出现彻底改变了游戏规则——它允许我们将VBScript脚本嵌入HTML,通过IIS服务器动态生成页面内容。这种将业务逻辑与表现层混合的模式虽然现在看来有些原始,但在当时绝对是革命性的进步。
2002年ASP.NET 1.0发布时,我正在参与一个电商平台的重构项目。我们连夜研究了新引入的"代码后置"(Code-Behind)模型,这种将界面与逻辑分离的设计理念,配合Visual Studio强大的工具箱,让团队开发效率提升了至少三倍。记得当时用C#重写原有的VBScript代码后,页面响应速度直接从秒级降到了毫秒级。
如今ASP.NET Core已成为我技术栈中的核心工具。去年用其构建的微服务架构支撑了日均百万级请求,而服务器资源消耗仅为原来PHP架构的1/3。这种跨越二十余年的技术生命力,在快速迭代的IT领域实属罕见。
早期ASP依赖Windows+IIS的强绑定,而现在的ASP.NET Core已经实现真正的跨平台。去年我在Ubuntu服务器上部署的.NET 6应用,通过Kestrel web服务器实现了比IIS更高的并发性能。实测数据显示:
| 环境 | 请求吞吐量(req/s) | 内存占用(MB) |
|---|---|---|
| Windows+IIS | 12,000 | 280 |
| Linux+Kestrel | 18,500 | 210 |
这种性能飞跃源于全新的中间件管道设计。不同于传统的ASP.NET HTTP模块,现在的中间件组件像俄罗斯套娃一样层层嵌套,每个只处理特定功能。我在金融项目中实现的认证中间件,仅用20行代码就完成了JWT令牌的校验和用户上下文注入。
ASP.NET Core内置的DI容器虽然功能不如Autofac强大,但对于大多数场景已经足够。我总结的最佳实践是:
csharp复制// 典型服务注册示例
services.AddScoped<IOrderService, OrderService>();
services.AddSingleton<ICacheProvider, RedisCache>();
services.AddTransient<IDataFormatter, JsonFormatter>();
重要提示:避免在单例服务中注入Scoped服务,这会导致生命周期混乱。我曾因此遭遇过内存泄漏,排查了整整两天。
去年为物流公司设计运单系统时,我们遇到了数据库连接池耗尽的问题。通过以下组合方案最终支撑住了"双十一"期间每分钟2万订单的峰值:
csharp复制// 原始写法(性能杀手)
foreach(var order in orders)
{
context.Orders.Add(order);
await context.SaveChangesAsync();
}
// 优化后写法
context.Orders.AddRange(orders);
await context.SaveChangesAsync();
在最近实施的保险理赔系统中,我们采用领域驱动设计(DDD)划分了六个微服务。每个服务包含:
mermaid复制graph TD
A[客户端] --> B{API网关}
B --> C[保单服务]
B --> D[定损服务]
B --> E[支付服务]
C --> F[SQL Server]
D --> G[MongoDB]
E --> H[Redis]
经验教训:微服务间通信优先采用异步消息(RabbitMQ)而非同步HTTP调用。我们曾因服务链式调用导致级联故障,后来引入Saga模式才彻底解决。
现代ASP.NET Core的身份系统比传统的Forms认证强大得多。我现在的标准配置包括:
csharp复制// 策略配置示例
services.AddAuthorization(options =>
{
options.AddPolicy("RequireAdmin", policy =>
policy.RequireClaim("role", "admin"));
});
// 控制器应用
[Authorize(Policy = "RequireAdmin")]
public class AdminController : Controller
XSS攻击仍然是Web应用的主要威胁。我坚持的三道防线:
[Required]、[StringLength]等数据注解@Html.Encode()或Razor自动编码html复制<!-- 危险做法 -->
<div>@Model.UserContent</div>
<!-- 安全做法 -->
<div>@Html.Raw(Model.SanitizedContent)</div>
通过以下配置可使API响应体积减少70%:
csharp复制services.AddResponseCompression(options =>
{
options.Providers.Add<BrotliCompressionProvider>();
options.EnableForHttps = true;
});
客户端缓存配置示例:
csharp复制[ResponseCache(Duration = 3600, Location = ResponseCacheLocation.Client)]
public IActionResult GetProduct(int id)
Application Insights是必备工具,但我更推荐组合方案:
这是我常用的诊断中间件:
csharp复制app.Use(async (context, next) =>
{
var stopwatch = Stopwatch.StartNew();
await next();
stopwatch.Stop();
logger.LogInformation($"请求 {context.Request.Path} 耗时 {stopwatch.ElapsedMilliseconds}ms");
});
Dockerfile优化经验:
dockerfile复制# 构建阶段
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app
# 运行阶段
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine
WORKDIR /app
COPY --from=build /app .
USER 1000
ENTRYPOINT ["dotnet", "MyApp.dll"]
GitHub Actions的经典配置:
yaml复制name: Build and Deploy
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.x
- name: Build
run: dotnet build --configuration Release
- name: Test
run: dotnet test
- name: Publish
run: dotnet publish -c Release -o ./publish
- name: Docker Build
run: docker build -t myapp .
- name: Deploy to AKS
run: kubectl apply -f k8s-deployment.yaml
去年用Blazor WASM重构管理后台,实现了C#全栈开发:
csharp复制// 共享的验证逻辑
public class ProductValidator : AbstractValidator<ProductDto>
{
public ProductValidator()
{
RuleFor(x => x.Name).NotEmpty().MaximumLength(100);
RuleFor(x => x.Price).GreaterThan(0);
}
}
微服务间采用gRPC替代REST API后,性能提升显著:
protobuf定义示例:
protobuf复制service OrderService {
rpc CreateOrder (CreateOrderRequest) returns (OrderResponse);
rpc StreamOrders (OrderFilter) returns (stream OrderResponse);
}
message CreateOrderRequest {
string user_id = 1;
repeated OrderItem items = 2;
}
通过dotnet-dump工具捕获内存快照:
bash复制dotnet tool install -g dotnet-dump
dotnet-dump collect -p <PID>
常见泄漏场景:
EF Core连接池问题特征:
解决方案:
csharp复制// 调整连接池大小
"ConnectionStrings": {
"DefaultConnection": "Server=...;MaxPoolSize=200;"
}
在最近完成的智慧医疗项目中,我们采用ASP.NET Core实现了以下创新架构:
关键收获:
虽然ASP.NET Core已经非常成熟,但有几个方向值得关注:
最近在实验将AI模型集成到ASP.NET Core管道中,使用ML.NET实现智能路由决策,初步测试显示可以减少20%的冗余请求处理。这种技术融合可能会带来新的架构范式。