ASP.NET Core入门 #

一、ASP.NET Core概述 #

1.1 什么是ASP.NET Core #

ASP.NET Core是.NET的跨平台Web开发框架。

1.2 特点 #

  • 跨平台
  • 高性能
  • 模块化
  • 依赖注入
  • 中间件

二、创建项目 #

2.1 命令行创建 #

bash
dotnet new webapi -n MyApi
dotnet new mvc -n MyMvc
dotnet new web -n MyWeb
dotnet new blazor -n MyBlazor

2.2 项目结构 #

text
MyApi/
├── Controllers/
├── Program.cs
├── appsettings.json
├── appsettings.Development.json
└── MyApi.csproj

2.3 Program.cs #

csharp
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

三、中间件 #

3.1 中间件概念 #

中间件是处理请求和响应的组件。

3.2 内置中间件 #

csharp
var app = builder.Build();

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();

3.3 自定义中间件 #

csharp
public class LoggingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger<LoggingMiddleware> _logger;
    
    public LoggingMiddleware(RequestDelegate next, ILogger<LoggingMiddleware> logger)
    {
        _next = next;
        _logger = logger;
    }
    
    public async Task InvokeAsync(HttpContext context)
    {
        _logger.LogInformation($"请求: {context.Request.Method} {context.Request.Path}");
        
        await _next(context);
        
        _logger.LogInformation($"响应: {context.Response.StatusCode}");
    }
}

app.UseMiddleware<LoggingMiddleware>();

四、依赖注入 #

4.1 注册服务 #

csharp
builder.Services.AddTransient<IUserService, UserService>();
builder.Services.AddScoped<IOrderService, OrderService>();
builder.Services.AddSingleton<ICacheService, CacheService>();

4.2 生命周期 #

生命周期 说明
Transient 每次请求创建新实例
Scoped 每个请求一个实例
Singleton 应用程序生命周期一个实例

4.3 使用服务 #

csharp
public class UsersController : ControllerBase
{
    private readonly IUserService _userService;
    
    public UsersController(IUserService userService)
    {
        _userService = userService;
    }
    
    [HttpGet("{id}")]
    public async Task<ActionResult<User>> GetUser(int id)
    {
        var user = await _userService.GetByIdAsync(id);
        return Ok(user);
    }
}

五、Web API #

5.1 创建Controller #

csharp
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpGet]
    public async Task<ActionResult<IEnumerable<User>>> GetAll()
    {
        return Ok(await _userService.GetAllAsync());
    }
    
    [HttpGet("{id}")]
    public async Task<ActionResult<User>> GetById(int id)
    {
        var user = await _userService.GetByIdAsync(id);
        if (user == null) return NotFound();
        return Ok(user);
    }
    
    [HttpPost]
    public async Task<ActionResult<User>> Create([FromBody] CreateUserRequest request)
    {
        var user = await _userService.CreateAsync(request);
        return CreatedAtAction(nameof(GetById), new { id = user.Id }, user);
    }
    
    [HttpPut("{id}")]
    public async Task<IActionResult> Update(int id, [FromBody] UpdateUserRequest request)
    {
        await _userService.UpdateAsync(id, request);
        return NoContent();
    }
    
    [HttpDelete("{id}")]
    public async Task<IActionResult> Delete(int id)
    {
        await _userService.DeleteAsync(id);
        return NoContent();
    }
}

5.2 最小API #

csharp
var app = builder.Build();

app.MapGet("/api/users", async (IUserService userService) =>
{
    return Results.Ok(await userService.GetAllAsync());
});

app.MapGet("/api/users/{id}", async (int id, IUserService userService) =>
{
    var user = await userService.GetByIdAsync(id);
    return user != null ? Results.Ok(user) : Results.NotFound();
});

app.MapPost("/api/users", async (CreateUserRequest request, IUserService userService) =>
{
    var user = await userService.CreateAsync(request);
    return Results.Created($"/api/users/{user.Id}", user);
});

六、配置 #

6.1 appsettings.json #

json
{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  },
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=MyDb"
  },
  "JwtSettings": {
    "SecretKey": "your-secret-key",
    "Issuer": "myapp",
    "Audience": "myapp"
  }
}

6.2 读取配置 #

csharp
public class JwtSettings
{
    public string SecretKey { get; set; }
    public string Issuer { get; set; }
    public string Audience { get; set; }
}

builder.Services.Configure<JwtSettings>(builder.Configuration.GetSection("JwtSettings"));

public class AuthService
{
    private readonly JwtSettings _jwtSettings;
    
    public AuthService(IOptions<JwtSettings> jwtSettings)
    {
        _jwtSettings = jwtSettings.Value;
    }
}

七、总结 #

ASP.NET Core要点:

要点 说明
中间件 请求处理管道
依赖注入 服务注册与使用
Controller Web API控制器
最小API 简化API开发
配置 appsettings.json

下一步,让我们学习Entity Framework Core!

最后更新:2026-03-26