WebApi.Library
1.1.5.1
dotnet add package WebApi.Library --version 1.1.5.1
NuGet\Install-Package WebApi.Library -Version 1.1.5.1
<PackageReference Include="WebApi.Library" Version="1.1.5.1" />
paket add WebApi.Library --version 1.1.5.1
#r "nuget: WebApi.Library, 1.1.5.1"
// Install WebApi.Library as a Cake Addin #addin nuget:?package=WebApi.Library&version=1.1.5.1 // Install WebApi.Library as a Cake Tool #tool nuget:?package=WebApi.Library&version=1.1.5.1
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
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
-
net8.0
- Asp.Versioning.Mvc (>= 8.1.0)
- Asp.Versioning.Mvc.ApiExplorer (>= 8.1.0)
- AutoMapper (>= 13.0.1)
- ElmahCore (>= 2.1.2)
- Fleck (>= 1.2.0)
- IPTools.China (>= 1.6.0)
- Microsoft.AspNetCore.Authentication.JwtBearer (>= 8.0.11)
- Microsoft.Bcl.AsyncInterfaces (>= 9.0.0)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 8.0.11)
- Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions (>= 8.0.11)
- Microsoft.Extensions.Options (>= 8.0.2)
- Pomelo.EntityFrameworkCore.MySql (>= 8.0.2)
- Swashbuckle.AspNetCore (>= 7.2.0)
- System.Data.SqlClient (>= 4.9.0)
- System.IdentityModel.Tokens.Jwt (>= 8.3.0)
- System.Text.Encoding.CodePages (>= 8.0.0)
- System.Text.Json (>= 9.0.0)
- UAParser (>= 3.1.47)
- Ude.NetStandard (>= 1.2.0)
- xBei.Redis.Extension.MsgPack (>= 1.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.1.5.1 | 79 | 12/30/2024 |