# WebApi 配置
# Api 依赖注入
在 asp.net core api 项目中添加依赖注入,配置数据库读写权限。 如果需要身份认证,也要配置身份认证信息。
在 Startup.cs 的 ConfigureServices 函数中配置依赖注入。
public void ConfigureServices(IServiceCollection services)
{
//...
}
2
3
4
# Sqless 配置
services.AddTransient<SqlessConfig, SqlessConfig>((ctx) =>
{
return new SqlessConfig()
{
SqlConStr="...",
// more ...
};
});
2
3
4
5
6
7
8
在SqlessConfig
对象中,设置相应属性的内容。权限相关请参考后面详细介绍的 权限配置
# 身份认证
身份认证功能,能根据账号密码或 Token,获取用户的 Id,后续才能使用权限功能中的 所有者表 。
# Account/Password 方式
services.AddTransient<SqlessAccess, SqlessAccessPassword>((ctx) =>
{
return new SqlessAccessPassword();
});
2
3
4
# Token 方式
services.AddTransient<SqlessAccess, SqlessAccessToken>((ctx) =>
{
return new SqlessAccessToken();
});
2
3
4
# 示例
// Account/Password
public static SqlessAccess PasswordAccessConfig => new SqlessAccessPassword()
{
UidField = "Uid",
SqlConStr = SqlConStr,
AccessTable = Tables.User,
AccessAccountField = "Uid",
AccessPasswordField = "Password"
};
// Token
public static SqlessAccess TokenAccessConfig => new SqlessAccessToken()
{
UidField = "Uid",
SqlConStr = SqlConStr,
AccessTable = Tables.AccessToken,
AccessTokenField = "Token",
AccessTokenTypeField = "Platform"
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
身份认证详细配置,参考后面详细介绍的 身份认证
# Controller
Sqless 带有的基类 Controller 有两种
SqlessBaseController
SqlessAccessController
# SqlessBaseController
包含基本 Controller,有增删查改等接口,不包含身份认证功能。
包含虚函数 GetSqless
,可获取 Sqless 对象。
在依赖注入中,只需要有 Sqless 配置,构造函数也只支持 SqlessConfig
依赖注入。
protected readonly SqlessConfig SqlessConfig;
public SqlessBaseController(SqlessConfig sqlessConfig)
{
SqlessConfig = sqlessConfig;
}
2
3
4
5
# SqlessAccessController
包含身份认证的 Controller,从SqlessBaseController
派生。
使用此 Controller 或从此 Controller 派生,在依赖注入中必须有 身份认证。在构造函数支持SqlessAccess
和SqlessConfig
protected readonly SqlessAccess SqlessAccess;
public SqlessAccessController(SqlessAccess sqlessAccess, SqlessConfig sqlessConfig)
: base(sqlessConfig)
{
SqlessAccess = sqlessAccess;
}
2
3
4
5
6
重写的GetSqless
函数可根据身份认证功能获取到用户 Id
protected async override Task<Sqless> GetSqless(SqlessRequest request)
{
var uid = await SqlessAccess.GetUid(request.AccessParams);
SqlessConfig.AuthUid = uid;
return new Sqless(SqlessConfig);
}
2
3
4
5
6
# 扩展
简单项目,创建 Controller 并从 SqlessBaseController
或SqlessAccessController
派生即可使用,因为已内置如Select
,SelectFirst
,Update
等接口。
如果需求复杂,可在 Controller 的派生类中,使用GetSqless
函数获取 Sqless 对象,并实现复杂功能。如内置的SelectFirstOrDefault
[HttpPost]
public virtual async Task<ActionResult> SelectFirstOrDefault(SqlessSelectRequest request)
{
using Sqless sqless = await GetSqless(request);
return Ok((await (await GetSqless(request)).Select(request)).FirstOrDefault());
}
2
3
4
5
6
如果需求更复杂,可完全重写 Controller,而不从SqlessBaseController
或SqlessAccessController
派生。如重置用户密码、更改订单付款信息等敏感操作。