# WebApi脚手架 **Repository Path**: zijian666/WebApiExtensions ## Basic Information - **Project Name**: WebApi脚手架 - **Description**: 一键创建WebApi并使用各种标准化功能 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-06 - **Last Updated**: 2025-07-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WebApi 脚手架 ### 介绍 快速搭建WebApi应用 ### 更新日志 [点击查看](UPLOGS.md) ### 安装 [nuget - zijian666.WebApiExtensions](https://www.nuget.org/packages/zijian666.WebApiExtensions) ### 项目示例 [点击查看](example/WebApiDemo) ### 使用说明 ```csharp public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddWebApiOptions(option => { // 设置需要开启的功能 option.EnableTraceIdentifier(); option.AddTraceableHttpClient(""); option.EnableJsonStandardized(); option.EnableCors(); option.EnableRequestBuffering("api/test/hello"); option.EnableSwaggerGen(); option.EnableResultStandardized(); option.BindConfigurationSection(); option.AddInterfacesAsControllers(); }); } ``` ### 功能说明 #### 1. EnableTraceIdentifier 1. 调用`HttpContext.TraceIdentifier` 可获 **RequestId** 1. 默认标准返回值会返回 `RequestId` 属性 [源码](src/zijian666.WebApiExtensions/WebApiOptions/TraceIdentifier.cs) #### 2. AddTracingHttpClient 在操作`HttpClient`时,将`HttpContext.TraceIdentifier`加入到请求头`X-Correlation-ID` > _当请求头已经存在`X-Correlation-ID`或`X-Request-ID`时,不会覆盖已有的值_ [源码](src/zijian666.WebApiExtensions/WebApiOptions/TraceableHttpClient.cs) #### 3. EnableJsonStandardized 将格式化JSON功能标准化 1. 命名方式改为小于+下划线 如 RequestId -> request_id 1. 时间格式固定为 yyyy-MM-dd HH:mm:ss [源码](src/zijian666.WebApiExtensions/WebApiOptions/JsonStandardized.cs) #### 4. EnableCors 所有WEBAPI支持跨域 [源码](src/zijian666.WebApiExtensions/WebApiOptions/Cors.cs) #### 5. EnableRequestBuffering 所有请求会将请求正文缓冲到内存中,以便请求体可被多次读取 [详见: HttpRequestRewindExtensions.EnableBuffering](https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.aspnetcore.http.httprequestrewindextensions.enablebuffering?f1url=%3FappId%3DDev16IDEF1%26l%3DZH-CN%26k%3Dk(Microsoft.AspNetCore.Http.HttpRequestRewindExtensions.EnableBuffering)%3Bk(DevLang-csharp)%26rd%3Dtrue&view=aspnetcore-6.0) 可设置不需要缓存的例外情况情况 [源码](src/zijian666.WebApiExtensions/WebApiOptions/RequestBuffering.cs) ##### 使用说明 ```csharp public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddWebApiOptions(option => { option.EnableRequestBuffering("api/test/hello", "api/abc/[api1|api2]"); // 支持前缀匹配和正则匹配 option.EnableRequestBuffering(""api/abc/[api3]"); // 支持多次调用 }); } ``` #### 6. EnableSwaggerGen 可打开`/swagger/index.html`访问WebApi文档 [源码](src/zijian666.WebApiExtensions/WebApiOptions/Swagger.cs) #### 7. EnableResultStandardized 格式化所有返回值 [源码](src/zijian666.WebApiExtensions/WebApiOptions/ResultStandardized.cs) #### 8. BindConfigurationSection 绑定配置类 [源码](src/zijian666.WebApiExtensions/WebApiOptions/BindConfiguration.cs) ##### 使用说明 定义一个配置文件 ```json { "ali": { "AppKey": "AppKey", "SecretKey": "SecretKey" } } ``` 定义一个配置类 ```csharp [ConfigurationSection("ali")] public class AliConfig { public string AppKey { get; set; } public string SecretKey { get; set; } } ``` 启用BindConfigurationSection ```csharp public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddWebApiOptions(option => { option.BindConfigurationSection(); }); } ``` 服务注入 ```csharp public class TestController : ApiControllerBase { private readonly AliConfig _aliConfig; public TestController(AliConfig aliConfig) => _aliConfig = aliConfig; } ``` #### 8. AddInterfacesAsControllers 将指定接口添加为控制器 [源码](src/zijian666.WebApiExtensions/WebApiOptions/InterfacesAsControllers.cs) ##### 使用说明 定义服务接口,并标记`[HttpApi]`,或`手动注入` > 默认路由 **/api/[controller]/[action]**,可以通过设置 _HttpApiAttribute_.`Template` 修改默认值 ```csharp [HttpApi] public interface IDemoService { string Hello(); int GetNumber(); } ``` 实现接口 > 略 注入 ```csharp public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddWebApiOptions(option => { option.AddInterfacesAsControllers(); // 注入标记为 [HttpApi] 的所有接口 // option.AddInterfacesAsControllers("WebApiDemo.Services");// 注入指定命名空间下的所有接口 // option.AddInterfacesAsControllers(typeof(IDemoService)); // 注入需要转换为Controller的服务接口 }); } ``` #### 注意事项1 > 无