使用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
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- API协议设计的10种技术
- ComfyUI API是什么:深入探索ComfyUI的API接口与应用
- 从架构设计侧剖析: MCP vs A2A 是朋友还是对手?
- Kimi Chat API入门指南:从注册到实现智能对话
- 免费查询公司注册信息API的使用指南
- 防御 API 攻击:保护您的 API 和数据的策略
- 香港支付宝实名认证:是什么?怎么用?
- 如何获取 Coze开放平台 API 密钥(分步指南)
- 如何保护您的API免受自动化机器人和攻击 | Zuplo博客
- ASP.NET Core Minimal APIs 入门指南 – JetBrains 博客
- 什么是 OpenReview
- Vue中使用echarts@4.x中国地图及AMap相关API的使用