C# MinimalAPI 是微软推出的一种轻量级、简洁而灵活的框架,用于构建 Web 应用程序。它的设计目标是提供一种简单易用的方式来创建 HTTP 服务,同时减少样板代码和冗余配置。
下面是对 C# MinimalAPI 的详细解释:
- 简洁易用:C# MinimalAPI 借鉴了其他流行的框架(如 Flask、Express),提供了一种简单易懂的 API 设计,使开发者能够快速上手并构建 Web 应用程序。
- 减少样板代码:传统的 ASP.NET 框架中,需要编写大量的样板代码来完成基本的路由配置、请求处理等功能。而在 C# MinimalAPI 中,通过使用属性路由和简化的语法结构,可以显著减少冗余的代码。
- 轻量级:C# MinimalAPI 非常轻量级,只需引用一个 NuGet 包即可开始开发。它不依赖于大型的 ASP.NET Core 框架,因此在内存消耗和启动时间上都比较快。
- 集成性:尽管 C# MinimalAPI 是一个独立的框架,但它仍然可以与其他 ASP.NET Core 组件和生态系统无缝集成。你可以在应用程序中使用依赖注入、中间件和其他标准的 ASP.NET Core 特性。
- 高度灵活:C# MinimalAPI 允许开发者自由选择它们喜欢的方式来组织和构建应用程序。你可以按照自己的需求进行路由设置、请求处理和中间件配置,没有过多的约束。
- 性能优化:C# MinimalAPI 在设计上注重性能,它对内存消耗进行了优化,并且在处理请求时采用了异步编程模型。这使得它能够处理大量并发请求而不会对系统性能造成太大影响。
总之,C# MinimalAPI 是一个简洁、轻量级、灵活且高性能的框架,可以帮助开发者快速构建和部署 Web 应用程序。它在简化开发流程和提高性能方面有着显著的优势,是一个非常有潜力的框架选择。
一、创建 MinimalAPI
- 安装.NET 6.0 SDK:
首先,你需要安装最新版本的.NET 6.0 SDK。你可以从Microsoft官方网站下载并安装它。
- 创建新项目:
打开命令行终端或者使用你喜欢的集成开发环境(IDE),创建一个新的C#控制台项目。在命令行中,你可以使用以下命令来创建项目:
dotnet new console -n MyMinimalApiApp
cd MyMinimalApiApp
- 安装Microsoft.AspNetCore.App 包:
在你的项目根目录下,运行以下命令来安装MinimalAPI所需的包:
dotnet add package Microsoft.AspNetCore.App --version 6.0.0-*
- 编写代码:
使用你喜欢的文本编辑器或者IDE打开项目,并编辑Program.cs文件。将文件修改为以下内容:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
var builder = WebApplication.CreateBuilder(args);
// 添加路由处理程序
builder.Services.AddRouting();
builder.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello, Minimal API!");
});
var app = builder.Build();
// 启动应用程序
app.Run();
- 运行应用程序:
在命令行终端中,切换到项目根目录并运行以下命令来启动应用程序:
dotnet run
- 测试应用程序:
打开Web浏览器,并在地址栏输入http://localhost:5000,你将看到输出的Hello, Minimal API!。
二、 MinimalAPI 示例
MinimalAPI的示例,用于验证用户登录并发放Token。在此之前,请确保你已经安装了适当的开发环境和准备好了所需的依赖项。
首先,创建一个新的C#项目,并在项目文件中添加以下依赖项:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.0-preview.5.*" />
<PackageReference Include="Microsoft.AspNetCore.Builder" Version="6.0.0-preview.6.*" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="6.0.0-preview.6.*" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0-preview.6.*" />
</ItemGroup>
接下来,创建一个名为Program.cs的文件,并将以下代码添加到其中:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
var builder = WebApplication.CreateBuilder(args);
const string TokenSecret = "your_secret_key";
const string TokenIssuer = "your_issuer";
const string TokenAudience = "your_audience";
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(TokenSecret)),
ValidateIssuer = true,
ValidIssuer = TokenIssuer,
ValidateAudience = true,
ValidAudience = TokenAudience,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
options.Events = new JwtBearerEvents
{
OnTokenValidated = context =>
{
var userService = context.HttpContext.RequestServices.GetRequiredService<IUserService>();
var userId = context.Principal.FindFirstValue("sub");
// 根据userId验证用户是否存在
if (userExists)
{
context.Fail("Unauthorized");
}
return Task.CompletedTask;
}
};
});
builder.Services.AddScoped<IUserService, UserService>();
builder.Services.AddAuthorization();
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapPost("/login", async context =>
{
var username = context.Request.Form["username"];
var password = context.Request.Form["password"];
// 调用你的用户验证逻辑
if (validUserCredentials)
{
var claims = new[]
{
new Claim("sub", userId) // 将用户ID添加到Token的负载中
};
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(TokenSecret);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.UtcNow.AddDays(7),
Issuer = TokenIssuer,
Audience = TokenAudience,
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);
await context.Response.WriteAsJsonAsync(new { token = tokenString });
}
else
{
context.Response.StatusCode = 401; // 验证失败
}
});
app.Run();
将上述代码中的以下部分替换为你自己的值:
- TokenSecret: 用于签署和验证Token的密钥。
- TokenIssuer: 发行者(issuer)标识。
- TokenAudience: 受众(audience)标识。
在示例代码中,有一个名为IUserService的接口和一个实现类UserService,你需要根据自己的需求来实现并注册该接口。
此示例创建了一个简单的登录路由/login,用于接收用户名和密码,验证用户凭据,并在验证通过后生成一个Token并返回给客户端。
请确保在生产环境中进行适当的安全性和错误处理措施,并对密钥和其他敏感信息进行适当的保护。
创作不易,如果您喜欢还请帮忙点赞关注,谢谢![作揖]