Supabase .NET SDK 入门指南

Supabase .NET SDK 入门指南

💡 原文英文,约1100词,阅读约需4分钟。
📝

内容提要

Supabase .NET SDK 8.0.0 发布,新增依赖注入包,改用 System.Text.Json,支持 HttpClient 注入与重试,要求 .NET Core 3.0+。文章介绍安装、定义模型、配置客户端,以及查询、增删改、认证和文件上传等基本操作,并提醒区分使用发布密钥与密钥。

🔎

延伸解读

从 Newtonsoft.Json 迁移到 System.Text.Json 的

v8.0.0 将序列化库从 Newtonsoft.Json 改为 System.Text.Json。如果你之前使用了 [JsonProperty] 特性或自定义转换器,需要替换为 System.Text.Json 的对应写法,例如 [JsonPropertyName] 和 JsonConverter。迁移指南列出了所有破坏性变更,升级前建议仔细阅读,避免运行时序列化错误。

HttpClient 生命周期管理:为何推荐依赖注入

直接 new Supabase.Client 会创建新的 HttpClient,频繁创建可能耗尽连接池。在 ASP.NET Core 中,AddSupabase 通过 IHttpClientFactory 池化并复用处理器,避免此问题。非 ASP.NET Core 应用应只创建一次客户端并复用,不要每次操作都新建实例。

更新与删除:两种方式的选择

如果已获取模型,可直接修改属性后调用 Update 或 Delete,模型自带主键标识。若没有模型,可用查询构建器:Set 设置新值,Where 过滤,再执行 Update 或 Delete,省去一次查询。注意 SDK 没有变更跟踪,修改属性后必须显式调用 Update 才会生效。

密钥使用:发布密钥与秘密密钥的区分

v8.0.0 新增 publishable 和 secret 密钥,与已有的 anon 和 service 密钥并存。任何交付给用户的客户端应使用 publishable 或 anon 密钥;secret 和 service 密钥必须保留在服务端,因为 service 密钥会绕过行级安全(RLS),不应出现在客户端应用中。

❓

Q&A

Supabase .NET SDK 8.0.0 有哪些主要变化?

序列化从 Newtonsoft.Json 改为 System.Text.Json;每个服务客户端支持注入 HttpClient 和可选的重试与退避;新增依赖注入包;目标框架改为 .NET Standard 2.1,因此需要 .NET Core 3.0+ 或 .NET 5+。

如何在 ASP.NET Core 中配置 Supabase 客户端?

安装 Supabase.Extensions.DependencyInjection 包,在 Program.cs 中调用 builder.Services.AddSupabase 并传入 URL 和密钥,可配置 AutoConnectRealtime、PostgrestRetry 等选项。AddSupabase 将 Supabase.Client 注册为 scoped 服务,并通过 IHttpClientFactory 管理 HttpClient。

Supabase .NET SDK 中如何定义数据模型?

模型类需继承 BaseModel,并使用 [Table] 特性指定表名,[PrimaryKey] 标记主键,[Column] 映射列。例如: [Table("todos")] public class Todo : BaseModel { [PrimaryKey("id")] public int Id { get; set; } [Column("task")] public string Task { get; set; } [Column("is_complete")] public bool IsComplete { get; set; } }

如何使用 Supabase .NET SDK 进行查询、插入、更新和删除操作?

查询:supabase.From<Todo>().Where(t => t.IsComplete == false).Get(),结果在 result.Models 中。插入:await supabase.From<Todo>().Insert(new Todo { ... })。更新:若已有模型,修改属性后调用 todo.Update<Todo>();否则用查询构建器:await supabase.From<Todo>().Set(t => t.IsComplete, true).Where(...).Update()。删除:await todo.Delete<Todo>() 或 await supabase.From<Todo>().Where(...).Delete()。

Supabase .NET SDK 如何实现用户认证?

认证通过 supabase.Auth 进行。注册:await supabase.Auth.SignUp(email, password);登录:await supabase.Auth.SignIn(email, password)。启用 AutoRefreshToken 后,客户端会自动刷新令牌并附加到数据库和存储请求,使行级安全策略生效。还支持 OAuth、魔法链接、电话和 SSO。

Supabase .NET SDK 中发布密钥和密钥有什么区别?

8.0.0 版本新增了 publishable 和 secret 密钥,同时保留 anon 和 service 密钥。publishable 或 anon 密钥可用于客户端;secret 和 service 密钥应保留在服务器端,因为 service 密钥会绕过行级安全策略,不应在客户端应用中使用。

🏷️

标签

➡️

继续阅读