From fb509619d1e2010f0ad5b49cb77c5897d1edc71f Mon Sep 17 00:00:00 2001 From: bicijinlian Date: Sun, 23 Jun 2024 12:13:44 +0800 Subject: [PATCH] =?UTF-8?q?docs:=E9=A1=B9=E7=9B=AE=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Docs/项目说明.md | 277 ++++++++++++++++++++++++------------------- 1 file changed, 157 insertions(+), 120 deletions(-) diff --git a/Docs/项目说明.md b/Docs/项目说明.md index b02d71f..468e607 100644 --- a/Docs/项目说明.md +++ b/Docs/项目说明.md @@ -1,12 +1,13 @@ 项目说明 ======= + 项目主要学习WebAPI启动项设置,特别是默认启始页设置。特别是在部署为子站点时的默认启动页。 常用方法: + 路由+重定向 - - ```charp + + ```csharp //6.0及以上版本 app.Map("/", async context => { @@ -14,10 +15,8 @@ context.Response.Redirect("swagger/index.html"); await Task.CompletedTask; }); - + //或者MapGet方法 - - //老版本写法 app.UseEndpoints(endpoints => { @@ -28,9 +27,10 @@ }); }); ``` + + 路由+自定义内容 - ```charp + ```csharp namespace LaunchUrlStudy.SubSite2 { public class Program @@ -56,7 +56,7 @@ { //绝对Url string swaggerUrl = Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildAbsolute(context.Request.Scheme, context.Request.Host, context.Request.PathBase, "/swagger/index.html"); - + //相对Url string swaggerUrl2 = Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildRelative(context.Request.PathBase, "/swagger/index.html"); @@ -90,7 +90,7 @@ ``` + 路由+html文件 - + ```csharp namespace LaunchUrlStudy.SubSite3 { @@ -99,28 +99,28 @@ public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); - + // 配置IoC builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); - + var app = builder.Build(); - + // 配置请求管道 app.UseSwagger(); app.UseSwaggerUI(); - + app.UseAuthorization(); - + app.MapControllers(); - + app.Map("/", async context => { context.Response.ContentType = "text/html"; await context.Response.SendFileAsync(Path.Combine(app.Environment.ContentRootPath, "index.html")); }); - + app.Run(); } } @@ -128,47 +128,46 @@ ``` + 自定义中间件+重定向 - ```charp + + ```csharp namespace LaunchUrlStudy.SubSite4 { - public class Program - { - public static void Main(string[] args) - { - var builder = WebApplication.CreateBuilder(args); - - // Add services to the container. - builder.Services.AddControllers(); - builder.Services.AddEndpointsApiExplorer(); - builder.Services.AddSwaggerGen(); - - var app = builder.Build(); - - app.UseSwagger(); - app.UseSwaggerUI(); - - app.UseAuthorization(); - app.MapControllers(); - - //配置启动地址(支持子站点):自定义中间件+重定向 - app.Use(async (context, next) => - { - if (context.Request.Path == "/") - { - context.Response.Redirect($"{context.Request.PathBase}/swagger/Index.html"); - } - else - { - await next(); - } - }); - - - app.Run(); - } - } - } + public class Program + { + public static void Main(string[] args) + { + var builder = WebApplication.CreateBuilder(args); + + // Add services to the container. + builder.Services.AddControllers(); + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(); + + var app = builder.Build(); + + app.UseSwagger(); + app.UseSwaggerUI(); + + app.UseAuthorization(); + app.MapControllers(); + + //配置启动地址(支持子站点):自定义中间件+重定向 + app.Use(async (context, next) => + { + if (context.Request.Path == "/") + { + context.Response.Redirect($"{context.Request.PathBase}/swagger/Index.html"); + } + else + { + await next(); + } + }); + app.Run(); + } + } + } ``` + 第三方中间件:`Swagger中间件` 不支持子站点 @@ -180,28 +179,26 @@ { public static void Main(string[] args) { - var builder = WebApplication.CreateBuilder(args); + var builder = WebApplication.CreateBuilder(args); - builder.Services.AddControllers(); - builder.Services.AddEndpointsApiExplorer(); - builder.Services.AddSwaggerGen(); - - var app = builder.Build(); - - app.UseSwagger(); - // 配置启动地址(不支持子站点):设置Swagger中间件 - app.UseSwaggerUI(config => - { - config.SwaggerEndpoint("swagger/v1/swagger.json", "My API V1"); - config.RoutePrefix = string.Empty; - }); + builder.Services.AddControllers(); + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(); - app.UseAuthorization(); + var app = builder.Build(); + app.UseSwagger(); + // 配置启动地址(不支持子站点):设置Swagger中间件 + app.UseSwaggerUI(config => + { + config.SwaggerEndpoint("swagger/v1/swagger.json", "My API V1"); + config.RoutePrefix = string.Empty; + }); - app.MapControllers(); + app.UseAuthorization(); + app.MapControllers(); - app.Run(); + app.Run(); } } } @@ -209,69 +206,109 @@ ``` + 第三方中间件:`健康检查中间件` 即默认为健康检查地址 - - ```charp - namespace LaunchUrlStudy.SubSite6 - { - public class Program - { - public static void Main(string[] args) - { - var builder = WebApplication.CreateBuilder(args); - - // Add services to the container. - - builder.Services.AddControllers(); - builder.Services.AddHealthChecks(); - - var app = builder.Build(); - - app.UseAuthorization(); - app.MapControllers(); - - //配置启动地址(支持子站点):第三方 `健康检查中间件` - app.UseHealthChecks(""); - - app.Run(); - } - } - } - ``` + + ```csharp + namespace LaunchUrlStudy.SubSite6 + { + public class Program + { + public static void Main(string[] args) + { + var builder = WebApplication.CreateBuilder(args); + + // Add services to the container. + + builder.Services.AddControllers(); + builder.Services.AddHealthChecks(); + + var app = builder.Build(); + + app.UseAuthorization(); + app.MapControllers(); + + //配置启动地址(支持子站点):第三方 `健康检查中间件` + app.UseHealthChecks(""); + + app.Run(); + } + } + } + ``` + 使用静态文件服务器:UseDefaultFiles和UseStaticFiles - - ```csharp - - ``` + + ```csharp + namespace LaunchUrlStudy.SubSite7 + { + public class Program + { + public static void Main(string[] args) + { + var builder = WebApplication.CreateBuilder(args); + + // Add services to the container. + + builder.Services.AddControllers(); + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(); + + var app = builder.Build(); + + app.UseSwagger(); + app.UseSwaggerUI(); + + app.UseAuthorization(); + app.MapControllers(); + + // 配置启动地址(支持子站点):静态文件服务器默认页 + // 只能是wwwroot里的静态真实文件,不能是"swagger/index.html"(因为它是㠌入的资源文件,不在wwwroot中) + app.UseDefaultFiles(new DefaultFilesOptions() + { + DefaultFileNames = new[] + { + //可以是静态文件 + "index.html", + + //不能是虚拟文件:因为它是㠌入的资源文件,不在wwwroot中 + //"swagger/index.html" + } + }); + app.UseStaticFiles(); + + app.Run(); + } + } + } + ``` + 环境变量与配置文件:不推荐 思路是:在配置或环境变量中设置一个指定的变量,在程序代码中读取其值后,配置使用。 - + 这需要事先知道子站点的值,不灵活。环境变量可以在Docker中使用,配置文件就太不灵活了。 + 部署配置 - 在部署ASP.NET 6 Web API时,配置服务器或反向代理服务器(如Nginx或Apache)来处理默认请求。例如,在Nginx配置中设置默认页面: - - ``` txt - server { - listen 80; - server_name yourdomain.com; - location / { - proxy_pass http://localhost:5000; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection keep-alive; - proxy_set_header Host $host; - proxy_cache_bypass $http_upgrade; - } - } - - ``` + 在部署 ASP.NET 6 Web API时,配置服务器或反向代理服务器(如Nginx或Apache)来处理默认请求。例如,在Nginx配置中设置默认页面: + + ```lua + server { + listen 80; + server_name yourdomain.com; + location / { + proxy_pass http://localhost:5000; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + } + } + ``` + 使用URL重写规则 不推荐 在使用IIS或Nginx等软件代理时,可以设置URL重写规则。因为需要引入组件和配置规则,相对来说太麻烦,不推荐使用。 总结: + + 优先使用: 自定义路由(重定向或自定义内容或文件) 和 自定义中间件,简单、灵活、支持站点也支持子站点; + 如果启用了静态站点服务,可以配置 UseDefaultFiles ,可以指定静态站点中的html文档; + 如果默认地址,用作 `健康检查路径`,也可以直接设置`健康检查路径`为站点首页;