使用API向ASP.NET Core应用程序运行时添加新端点...
最近,我在博客中分享了关于 API 框架的内容,这是一个开源项目,旨在让构建 ASP.NET Core 后端更加灵活。API 框架的核心功能之一是能够在运行时向后端添加新端点,而无需重建和重新启动系统。本文将详细介绍如何实现这一目标。
目标
我们的目标是创建一个基于 ASP.NET Core 的应用程序,用户可以通过 UI(用户界面)动态添加新的端点。同时,添加的端点会自动更新后端的 OpenAPI 文档。
源代码
本文的完整源代码可以在 GitHub 上找到:GitHub 项目地址
添加 API 框架
首先,我们需要在项目中添加 API 框架和相关依赖项。以下是需要添加的 NuGet 包:
配置服务
在 Startup.cs 文件中,修改 ConfigureServices 方法,添加 Razor Pages、Blazor、控制器支持以及 API 框架和 OpenAPI 文档支持:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddControllers();
services.AddApiFramework();
services.AddOpenApiDocument();
}
配置中间件
接下来,在 Configure 方法中配置中间件,确保控制器、静态文件、OpenAPI 和 Swagger UI 的支持:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseDeveloperExceptionPage();
app.UseHttpsRedirection();
app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseOpenApi();
app.UseSwaggerUi3(); app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapRazorPages();
endpoints.MapBlazorHub();
});
}
运行应用程序后,虽然表面上看不到任何变化,但如果导航到 /swagger,可以看到当前没有任何端点。
构建 API
在 API 框架中,API 是一个可重用的组件,包含名称、版本和特定功能。API 可以通过普通的 C
类构建,甚至可以使用委托或 Roslyn 脚本等工具。
示例:Hello World API
以下是一个简单的 Hello World API 示例:
public class HelloWorldApi
{
public string SayHello()
{
return "Hello from AF!";
}
}
此时,API 本身还无法通过 HTTP 访问。我们需要从 API 创建一个或多个端点,才能通过 HTTP 调用这些功能。
自动注册 API
为了简化操作,可以让 API 框架自动注册 API。通过以下配置启用自动注册功能:
services.AddApiFramework(options =>
{
options.AutoResolveApis = true;
});
现在,我们的 API 已经被注册到框架的 API 目录中,但尚未创建任何端点,因此运行应用程序时仍然没有新功能。
创建用户界面
接下来,我们需要构建一个用户界面,用于动态添加端点。
列出 API 目录
首先,创建一个新的 Razor 组件 EndpointManagement.razor,用于显示 API 目录中的所有 API:
@using Weikio.ApiFramework.Abstractions
@code {
[Inject]
IApiProvider ApiProvider { get; set; } protected override void OnInitialized()
{
base.OnInitialized();
}
}
将该组件添加到 Index.cshtml 页面中:
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
运行应用程序后,API 目录表可能为空,这是因为目录的初始化是在后台线程中完成的。刷新页面后,应该可以看到 API 列表。
动态创建端点
为了实现动态创建端点的功能,我们需要使用 IEndpointManager 接口。以下是实现步骤:
定义端点
端点需要包含路由和 API 定义,并可以包含额外的配置。例如:
var endpoint = new EndpointDefinition(EndpointRoute, SelectedApi);
添加端点到系统
使用 CreateAndAdd 方法将端点添加到系统中:
EndpointManager.CreateAndAdd(endpoint);
更新端点
最后,调用 Update 方法,使新端点生效:
EndpointManager.Update();
以下是完整的 Create 方法实现:
private void Create()
{
var endpoint = new EndpointDefinition(EndpointRoute, SelectedApi);
EndpointManager.CreateAndAdd(endpoint); EndpointManager.Update();
}
运行应用程序后,可以通过 UI 选择 API,输入路由(例如 /test),然后点击创建按钮。新端点会立即生效。
测试端点
创建端点后,可以通过浏览器访问新端点。例如,访问 /api/test,应该可以看到返回的内容。同时,导航到 /swagger,可以看到新的端点已经出现在 OpenAPI 文档中。
结论
通过本文的介绍,我们成功地在一个基于 ASP.NET Core 3.1 的应用程序中实现了运行时动态添加端点的功能,而无需重建或重启应用程序。完整代码可以在 GitHub 上获取。
未来,我们可以基于此功能进一步扩展,例如:
- 动态删除端点
- 从需要配置的 API 创建端点
- 列出和查看端点状态
- 动态创建 API
- 从 NuGet 包分发的 API 创建端点
通过这些功能,API 框架为 ASP.NET Core 后端开发提供了极大的灵活性和扩展性。
原文链接: https://mikaelkoskinen.net/post/aspnet-core-runtime-changes-new-endpoint
最新文章
- Deribit API – 入门指南
- REST API命名规范的终极指南:清晰度和一致性的最佳实践
- Go:基于 MongoDB 构建 REST API — Fiber 版
- 免费IP地址查询API接口推荐
- 【2025】AI 占星报告批量生成器|基于 Astro-Seek API 微调 7B 模型,一键输出每日/每周运势
- 微信API接口调用凭证+Access token泄露
- 最流行的API认证方法
- 将 GraphQL 单体迁移至 Apollo Federation
- 声音即身份:声纹识别API如何改变身份验证的未来
- 国内API KEY 密钥免费的AI平台及其使用指南
- 全面解读:REST API与OpenAPI的区别、应用及最佳实践指南
- 5款强大且高效的API漏洞扫描工具推荐