📰
imarket校园集市
  • Welcome
  • Introduce(简介)
  • Getting Started
    • Quickstart(快速开始)
  • API
    • 安全认证
    • Auth(认证与授权)
    • Account(账户管理)
    • Admin(管理员功能)
    • Post(帖子管理)
    • User(用户相关)
    • Comments(评论管理)
    • Message(站内消息)
    • Image(图片管理)
    • Search(搜索功能)
  • Plugin
    • Introduce(插件系统简介)
    • Start(快速上手)
    • Dependency Injection(依赖注入)
    • API (状态接口)
  • Database
    • Tables(数据库表结构)
    • create_tables_script(数据库创建脚本)
Powered by GitBook
On this page
  1. Plugin

Start(快速上手)

1. 创建插件类

要编写插件,首先你需要创建一个实现了 IPluginInterceptor 接口的类,并使用 PluginTag 特性来定义插件的元数据(名称、描述和作者)。

例如,以下是一个简单的插件实现:

using imarket.plugin;

namespace plugin_test
{
    [PluginTag(Name = "plugin_test", Description = "A plugin for testing", Author = "Your Name")]
    public class plugin_test: IPluginInterceptor
    {
        // 请求开始时拦截
        public async Task<(bool op, object? result)> OnBeforeExecutionAsync(string route, object?[] args, string? username = null)
        {
            // 路由筛选
            if (route == "/api/Account/Info" && !string.IsNullOrEmpty(username))
            {
                
                return (true,new
                {
                    success = true,
                    info = new
                    {
                        username = "test",
                        nickname = "test",
                        avatar = "test",
                        email = "test",
                        status = "test",
                        from = "test"
                    }
                });
            }
            return (false,null);
        }
        
        // 请求处理完成拦截
        public async Task<(bool op, object? result)> OnAfterExecutionAsync(string route, object? result, string? username = null)
        {
            return (false, null);
        }
        
        // 注册路由
        public void RegisterRoutes(IEndpointRouteBuilder endpoints)
        {
            // 注册路由
            endpoints.MapGet("/api/plugin_test", async context =>
            {
                await context.Response.WriteAsJsonAsync(new
                {
                    success = true,
                    message = "Hello from plugin_test"
                });
            });
        }
    }
}

在plugin文件夹下面创建文件夹,文件结构如下

- plugin
    - myplugin
        - plugin.cs
PreviousIntroduce(插件系统简介)NextDependency Injection(依赖注入)

Last updated 3 months ago