# WebApi 配置

# Api 依赖注入

在 asp.net core api 项目中添加依赖注入,配置数据库读写权限。 如果需要身份认证,也要配置身份认证信息。

在 Startup.cs 的 ConfigureServices 函数中配置依赖注入。

public void ConfigureServices(IServiceCollection services)
{
    //...
}
1
2
3
4

# Sqless 配置

services.AddTransient<SqlessConfig, SqlessConfig>((ctx) =>
{
    return new SqlessConfig()
    {
        SqlConStr="...",
        // more ...
    };
});
1
2
3
4
5
6
7
8

SqlessConfig对象中,设置相应属性的内容。权限相关请参考后面详细介绍的 权限配置

# 身份认证

身份认证功能,能根据账号密码或 Token,获取用户的 Id,后续才能使用权限功能中的 所有者表

# Account/Password 方式

services.AddTransient<SqlessAccess, SqlessAccessPassword>((ctx) =>
{
    return new SqlessAccessPassword();
});
1
2
3
4

# Token 方式

services.AddTransient<SqlessAccess, SqlessAccessToken>((ctx) =>
{
    return new SqlessAccessToken();
});
1
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"
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

身份认证详细配置,参考后面详细介绍的 身份认证

# Controller

Sqless 带有的基类 Controller 有两种

  1. SqlessBaseController
  2. SqlessAccessController

# SqlessBaseController

包含基本 Controller,有增删查改等接口,不包含身份认证功能。

包含虚函数 GetSqless,可获取 Sqless 对象。

在依赖注入中,只需要有 Sqless 配置,构造函数也只支持 SqlessConfig依赖注入。

protected readonly SqlessConfig SqlessConfig;
public SqlessBaseController(SqlessConfig sqlessConfig)
{
    SqlessConfig = sqlessConfig;
}
1
2
3
4
5

# SqlessAccessController

包含身份认证的 Controller,从SqlessBaseController派生。

使用此 Controller 或从此 Controller 派生,在依赖注入中必须有 身份认证。在构造函数支持SqlessAccessSqlessConfig

protected readonly SqlessAccess SqlessAccess;
public SqlessAccessController(SqlessAccess sqlessAccess, SqlessConfig sqlessConfig)
    : base(sqlessConfig)
{
    SqlessAccess = sqlessAccess;
}
1
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);
}
1
2
3
4
5
6

# 扩展

简单项目,创建 Controller 并从 SqlessBaseControllerSqlessAccessController派生即可使用,因为已内置如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());
}
1
2
3
4
5
6

如果需求更复杂,可完全重写 Controller,而不从SqlessBaseControllerSqlessAccessController派生。如重置用户密码、更改订单付款信息等敏感操作。

Last Updated: 12/10/2020, 10:26:39 PM