一.NET Core Web API 架构
.NET Core Web API 架构是一个基于 ASP.NET Core 框架构建的用于创建 HTTP 服务的架构。它采用了 MVC(Model-View-Controller)架构模式,并提供了许多内置的功能和工具,以帮助开发者快速构建可扩展、可维护且高性能的 Web API。
以下是 .NET Core Web API 架构的一些关键组件和概念:
- 控制器(Controllers):控制器是处理 HTTP 请求的类,它们负责接收请求数据、调用业务逻辑层的方法,并返回响应数据。控制器中的每个方法通常对应一个特定的 HTTP 动作(如 GET、POST、PUT、DELETE 等)和一个路由。
- 模型(Models):模型表示应用程序中使用的数据对象。它们通常对应于数据库中的表或业务实体。模型类负责数据的验证、转换和存储。
- 视图(Views):在 Web API 架构中,视图通常不是用于呈现用户界面,而是用于定义 API 的响应格式。开发者可以使用不同的序列化器(如 JSON.NET、XML 序列化器等)来控制模型数据如何转换为 API 响应。
- 路由(Routing):路由是确定如何将 HTTP 请求映射到相应控制器和方法的机制。ASP.NET Core 提供了一个灵活的路由系统,允许开发者定义复杂的路由模式和参数。
- 依赖注入(Dependency Injection):依赖注入是 .NET Core Web API 架构中的一个核心概念,它允许开发者将服务和组件注入到控制器和其他类中。这有助于提高代码的可测试性和可维护性。
- 中间件(Middleware):中间件是处理 HTTP 请求和响应的组件管道。每个中间件组件都可以执行特定的任务,如身份验证、日志记录、异常处理等。
- 验证和授权(Validation and Authorization):.NET Core Web API 提供了强大的验证和授权机制,以确保 API 请求的数据有效性和安全性。开发者可以使用数据注解或自定义验证逻辑来验证模型数据,并使用角色和策略来限制对 API 的访问。
- 异常处理(Exception Handling):为了提供一致的错误处理体验,.NET Core Web API 支持全局异常处理和自定义错误响应。
- 测试(Testing):ASP.NET Core 提供了丰富的测试工具和框架,如 xUnit、Mockito 等,用于对 Web API 进行单元测试、集成测试和端到端测试。
- 扩展性(Extensibility):由于 .NET Core 是开源的,开发者可以根据需要扩展 Web API 架构,添加自定义中间件、过滤器、格式化程序等。
综上所述,.NET Core Web API 架构是一个功能强大且灵活的框架,它提供了许多内置的功能和工具,以帮助开发者快速构建可扩展、可维护且高性能的 Web API。
.NET Core Web API应用场景
.NET Core Web API 的应用场景非常广泛,主要适用于构建 RESTful 服务,这些服务可以作为后端组件为前端应用程序提供数据。以下是一些典型的应用场景:
- 前后端分离的应用程序:.NET Core Web API 可以作为后端服务,与前端应用程序(如 Angular、React、Vue.js 等单页应用或传统的多页应用)进行通信。API 负责提供数据和处理业务逻辑,而前端负责展示和交互。
- 移动应用开发:.NET Core Web API 可以为移动应用程序(如 iOS、Android 应用)提供后端支持。通过 API,移动应用可以访问服务器上的数据和服务,实现数据的同步和交互。
- 微服务架构:在微服务架构中,.NET Core Web API 可以作为独立的、可伸缩的服务来构建应用程序。每个服务都负责特定的业务功能,并通过 API 与其他服务进行通信。这种架构有助于提高系统的可维护性、可扩展性和可靠性。
- 第三方服务集成:.NET Core Web API 可以用于构建第三方服务,如天气预报、支付接口、用户认证等。其他应用程序或系统可以通过调用这些 API 来获取所需的信息或服务。
- 实时通信:结合 SignalR 这样的库,.NET Core Web API 可以实现实时通信功能,如聊天应用、实时数据更新等。
- 数据 API:对于需要暴露数据给多个客户端(如 Web、移动、桌面应用等)的应用程序,.NET Core Web API 可以作为数据的统一入口,提供数据访问和操作的功能。
- RESTful API 设计:.NET Core Web API 非常适合设计 RESTful 风格的 API,这些 API 遵循 HTTP 协议,使用 URI 来标识资源,并通过不同的 HTTP 方法(GET、POST、PUT、DELETE 等)来操作资源。
总之,.NET Core Web API 适用于任何需要构建可扩展、可维护且高性能的后端服务或 API 的场景。它提供了丰富的功能和灵活的工具,使得开发者能够快速地构建出稳定、安全的应用程序。
二.NET Core Web API实例
下面是一个简单的.NET Core Web API实例,演示了如何创建一个基本的API控制器并处理HTTP请求。
首先,确保你已经安装了.NET Core SDK。然后,你可以使用命令行界面(CLI)创建一个新的.NET Core Web API项目:
bash代码
dotnet new webapi -n MyWebApi | |
cd MyWebApi |
这将会创建一个名为MyWebApi的新项目,并且进入到该项目的目录中。接下来,打开项目中的Controllers文件夹,并创建一个新的控制器类。例如,我们可以创建一个名为WeatherForecastController的控制器,用于提供天气预测数据。
在Controllers文件夹中,创建一个新文件WeatherForecastController.cs,并添加以下代码:
csharp代码
using Microsoft.AspNetCore.Mvc; | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Threading.Tasks; | |
namespace MyWebApi.Controllers | |
{ | |
[ApiController] | |
[Route("[controller]")] | |
public class WeatherForecastController : ControllerBase | |
{ | |
private static readonly Random _random = new Random(); | |
[HttpGet(Name = "GetWeatherForecast")] | |
public IEnumerable<WeatherForecast> Get() | |
{ | |
var rng = new Random(); | |
return Enumerable.Range(1, 5).Select(index => new WeatherForecast | |
{ | |
Date = DateTime.Now.AddDays(index), | |
TemperatureC = rng.Next(-20, 55), | |
Summary = Summaries[rng.Next(Summaries.Length)] | |
}) | |
.ToArray(); | |
} | |
private static readonly string[] Summaries = new[] | |
{ | |
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" | |
}; | |
public class WeatherForecast | |
{ | |
public DateTime Date { get; set; } | |
public int TemperatureC { get; set; } | |
public string Summary { get; set; } | |
} | |
} | |
} |
在上面的代码中,我们定义了一个WeatherForecastController类,并且使用了[ApiController]和[Route("[controller]")]属性来指定这是一个API控制器,并且其路由将基于控制器名称。
我们还定义了一个Get方法,该方法使用HTTP GET请求来获取天气预测数据。该方法返回一个WeatherForecast对象的集合,其中每个对象包含日期、摄氏温度和天气摘要。
WeatherForecast是一个简单的类,包含三个属性:Date、TemperatureC和Summary。
现在,你可以运行这个Web API项目:
bash代码
dotnet run |
这将启动一个本地的Kestrel Web服务器,并监听默认的HTTP端口(通常是5000或5001)。你可以使用浏览器或任何HTTP客户端(如Postman、curl等)来发送HTTP GET请求到http://localhost:5000/weatherforecast,并应该能看到返回的JSON格式的天气预测数据。
这就是一个简单的.NET Core Web API实例。你可以根据需要扩展它,添加更多的控制器、动作和模型,以满足你的应用程序需求。
-
- .NET Core Web API +EF框架访问SQLserver数据库
在.NET Core Web API中使用Entity Framework Core (EF Core) 框架来访问SQL Server数据库是一个常见的做法。下面是一个简单的示例,展示了如何创建一个.NET Core Web API项目,使用EF Core来连接和操作SQL Server数据库。
首先,确保你已经安装了.NET Core SDK和SQL Server数据库。然后,按照以下步骤操作:
- 创建.NET Core Web API项目
使用命令行界面(CLI)创建一个新的.NET Core Web API项目:
bash代码
dotnet new webapi -n MyWebApiWithEF | |
cd MyWebApiWithEF |
- 添加EF Core和SQL Server NuGet包
接下来,你需要添加Entity Framework Core和SQL Server提供程序的NuGet包到你的项目中。使用以下命令来安装它们:
bash代码
dotnet add package Microsoft.EntityFrameworkCore.SqlServer | |
dotnet add package Microsoft.EntityFrameworkCore.Tools |
- 配置数据库连接字符串
在你的appsettings.json文件中,添加数据库连接字符串。例如:
json代码
{ | |
"ConnectionStrings": { | |
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyWebApiWithEFDb;Trusted_Connection=True;MultipleActiveResultSets=true" | |
}, | |
"Logging": { | |
"LogLevel": { | |
"Default": "Information", | |
"Microsoft": "Warning", | |
"Microsoft.Hosting.Lifetime": "Information" | |
} | |
}, | |
"AllowedHosts": "*" | |
} |
确保连接字符串与你的SQL Server实例匹配。
- 创建数据库模型
在项目中创建一个模型类来表示数据库中的表。例如,创建一个Product类:
csharp代码
namespace MyWebApiWithEF.Models | |
{ | |
public class Product | |
{ | |
public int Id { get; set; } | |
public string Name { get; set; } | |
public decimal Price { get; set; } | |
} | |
} |
- 创建数据库上下文
创建一个继承自DbContext的类来表示数据库上下文。例如,创建一个ApplicationDbContext类:
csharp代码
using Microsoft.EntityFrameworkCore; | |
using MyWebApiWithEF.Models; | |
namespace MyWebApiWithEF.Data | |
{ | |
public class ApplicationDbContext : DbContext | |
{ | |
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) | |
: base(options) | |
{ | |
} | |
public DbSet<Product> Products { get; set; } | |
} | |
} |
- 配置EF Core
在Startup.cs的ConfigureServices方法中配置EF Core:
csharp代码
public void ConfigureServices(IServiceCollection services) | |
{ | |
services.AddControllers(); | |
// 配置EF Core | |
services.AddDbContext<ApplicationDbContext>(options => | |
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); | |
// 其他服务配置... | |
} |
- 创建数据库迁移和更新数据库
使用以下命令来创建数据库迁移:
bash代码
dotnet ef migrations add InitialCreate |
然后,使用以下命令来更新数据库:
bash代码
dotnet ef database update |
这将根据你在ApplicationDbContext中定义的DbSet属性在数据库中创建相应的表。
- 创建API控制器
现在,你可以创建一个API控制器来操作数据库中的Product数据。例如,创建一个ProductsController:
csharp代码
using Microsoft.AspNetCore.Mvc; | |
using Microsoft.EntityFrameworkCore; | |
using MyWebApiWithEF.Data; | |
using MyWebApiWithEF.Models; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Threading.Tasks; | |
namespace MyWebApiWithEF.Controllers | |
{ | |
[ApiController] | |
[Route("[controller]")] | |
public class ProductsController : ControllerBase | |
{ | |
private readonly ApplicationDbContext _context; | |
public ProductsController(ApplicationDbContext context) | |
{ | |
_context = context; | |
} | |
// GET: api/products | |
[HttpGet] | |
public async Task<ActionResult<IEnumerable<Product>>> GetProducts() | |
{ | |
return await _context.Products.ToListAsync(); | |
} | |
// 其他CRUD操作... | |
} | |
} |
现在,你可以运行你的Web API项目,并使用HTTP GET请求来访问http://localhost:5000/products,以获取所有的Product数据。
这只是一个简单的示例,演示了如何使用EF Core在.NET Core Web API中访问