WebApi.Library 1.1.3
WebApi.Library
这个库是一个大杂烩,包含了很多第三方库的二次封装。 以后会逐步分离精简方便维护升级。
核心使用Redis做缓存,Jwt做身份验证,默认用MySql数据库,对象存储OSS(参考:阿里OSS)作为资源存储。
默认支持Swagger。
配置
在项目根目录的appsettings.json写入默认配置,
可以在appsettings.Development.json、appsettings.Production.json或者appsettings.{EnvironmentName}.json等文件中写入对应环境(Development、Test、Production)用的配置信息。这个看情况自定。注意:这些文件不需要纳入版本控制。
依赖注入
实现IAutoLoadConfigurations的配置信息数据类会自动配置到依赖注入容器中。可以用特性AutoLoadConfigurationsAttribute指定配置子节名称,
默认是用配置类的短名称(就是类名,不带命名空间的)。
[AutoLoadConfigurations("Jwt")]
public class JwtSettings : IAutoLoadConfigurations {
public string Secret { get; set; }
}
实现IAutoRegisterRepository接口的类会自动注册(Scoped)到依赖注入容器中。
实现IAutoRegisterSingleton接口的类会自动注册(Singleton)到依赖注入容器中。
入口
WebApplication.Start()方法会自动配置WebApi,并且自动注册依赖注入容器中的配置信息、仓储、单例。
public class Program {
public static void Main(string[] args) {
WebApplication.Start(
args: args,
setupStartOptions: options => {
// 禁用自动注册依赖注入,默认是开启的
options.AutoRegisterServices = false;
// ...
},
setupService: (services, configuration, env) => {
// 具体的一些配置信息、服务等依赖注入
services.SetupSwagger("网址名称", "v1", "WebApi.xml", true);
services.ConfigElmah(env, options => options.Path = "el/mah");
// ...
},
setupApp: app => {
// 这里一般用来启动一些后台进程
}
);
}
}
模块说明
身份验证
Token的Payload中包含了用户的UserId、UserName、Roles、UserType、Expire(过期时间,时间比较短,有自动刷新机制)。
Token有5分钟的缓冲时间,过期不超过5分钟时使用(调用API)会自动刷新Token(也就是自动续期)。
通过在header中的newToken写入新的Token,客户端要自己更新本地的Token。
Token完全过期以后,可以通过refreshToken刷新得到新的Token,可以避免客户端重复登陆(使用密码)。
会先后从header(Authorization="Bearer {JWT_TOKEN}")和query(?token={JWT_TOKEN})中获取token并进行校验。
默认设置了两个Policy,Backend和SystemUser。
public class TestController : ControllerBase {
/// <summary>
/// 测试后台管理权限
/// </summary>
[HtttGet]
[Authorize(Policy = CommonConsts.Policy.Backend)]
public IActionResult TestBackend() {
return Ok();
}
/// <summary>
/// 系统内部调用
/// </summary>
[HtttGet]
[Authorize(Policy = CommonConsts.Policy.System)]
public IActionResult TestSysApi() {
return Ok();
}
/// <summary>
/// 登陆用户
/// </summary>
[HtttGet]
[Authorize()]
public IActionResult TestUser() {
return Ok();
}
/// <summary>
/// VIP用户可访问
/// </summary>
[HtttGet]
[Authorize(Roles = "VIP")]
public IActionResult TestVipUser() {
return Ok();
}
}
Backend
这个是用来识别请求是否有后台管理权限,
查找context.User.FindFirstValue("userType")获得用户类型(CommonConsts.UserType),如果是CommonConsts.UserType.Backend则通过验证。
SystemUser
这个是用来识别请求是否来自内部(微服务之间,或者API自己)调用。
按资源(控制器/方法)设置权限
暂时没有设置
健康检查
开启健康检查,可以在/healthz/alive查看健康状态,/healthz/ready查看就绪状态。
services.SetupHealthCheck((healthCheck) => {
//DbContext 检查
healthCheck.AddDbContextCheck<MyDbContext>(
"Db",
tags: new[] { "ready", "alive" },
customTestQuery: async (db, ct) => await db.Users.AnyAsync(cancellationToken: ct));
//Redis 检查
healthCheck.AddRedisCheck();
});
错误日志 ElmahCore
使用ElmahCore记录错误日志,默认可以在/elmah查看错误日志。
// 开启错误日志
// 在非生产环境(env.IsProduction() == false)中直接可以通过:/el/mah 查看错误日志
// 在生产环境(env.IsProduction() == true)中需要通过JWT认证(使用/el/mah?token={JWT_TOKEN})
services.ConfigElmah(env,
options => {
options.Path = "el/mah";
});
Ip地址库
services.SetupIpTools(Path.Combine(env.ContentRootPath, "Assets", "ip2region.db"), useMemoryCache: true);
依赖库
- JWT
- Redis xBei.Redis.Extension
SDK
Showing the top 20 packages that depend on WebApi.Library.
| Packages | Downloads |
|---|---|
|
AlibabaGreenClient
Package Description
|
125 |
|
xBei.Wechat
Package Description
|
120 |
|
xBei.Wechat
Package Description
|
39 |
|
xBei.Wechat
Package Description
|
32 |
|
xBei.Wechat
Package Description
|
30 |
|
xBei.Wechat
Package Description
|
23 |
|
xBei.Wechat
Package Description
|
13 |
|
AlibabaGreenClient
Package Description
|
13 |
|
xBei.Wechat
Package Description
|
12 |
|
xBei.Wechat
Package Description
|
11 |
|
xBei.Wechat
Package Description
|
9 |
.NET 8.0
- Asp.Versioning.Mvc (>= 8.1.0)
- xBei.Redis.Extension.MsgPack (>= 1.0.0)
- Ude.NetStandard (>= 1.2.0)
- UAParser (>= 3.1.47)
- System.Text.Encoding.CodePages (>= 8.0.0)
- System.IdentityModel.Tokens.Jwt (>= 7.6.2)
- System.Data.SqlClient (>= 4.8.6)
- Swashbuckle.AspNetCore (>= 6.6.2)
- Pomelo.EntityFrameworkCore.MySql (>= 8.0.2)
- Microsoft.Extensions.Options (>= 8.0.2)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 8.0.6)
- Microsoft.Bcl.AsyncInterfaces (>= 8.0.0)
- Microsoft.AspNetCore.Authentication.JwtBearer (>= 8.0.6)
- IPTools.China (>= 1.6.0)
- Fleck (>= 1.2.0)
- ElmahCore (>= 2.1.2)
- AutoMapper (>= 13.0.1)
- Asp.Versioning.Mvc.ApiExplorer (>= 8.1.0)
- Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions (>= 8.0.6)
| Version | Downloads | Last updated |
|---|---|---|
| 1.1.6.1 | 46 | 12/19/2025 |
| 1.1.6 | 4 | 12/19/2025 |
| 1.1.5.8 | 30 | 10/30/2025 |
| 1.1.5.7 | 8 | 09/17/2025 |
| 1.1.5.6 | 79 | 04/27/2025 |
| 1.1.5.5 | 33 | 04/12/2025 |
| 1.1.5.4 | 41 | 01/15/2025 |
| 1.1.5.3 | 21 | 01/03/2025 |
| 1.1.5.2 | 21 | 01/02/2025 |
| 1.1.5.1 | 30 | 12/30/2024 |
| 1.1.5 | 15 | 12/30/2024 |
| 1.1.4 | 98 | 11/18/2024 |
| 1.1.3 | 73 | 07/23/2024 |
| 1.1.2 | 11 | 06/23/2024 |
| 1.1.1 | 11 | 05/06/2024 |
| 1.1.0 | 10 | 03/18/2024 |