ABP IO 4.4.4修改Swagger默认URL遇abp.js 404问题求助
解决ABP IO 4.4.4修改Swagger URL前缀引发的abp.js 404问题
你遇到的问题是因为普通ASP.NET Core修改Swagger前缀的方案没适配ABP框架的静态资源路由规则——ABP的abp.js等静态资源默认挂载在根路径下,当Swagger UI的路由前缀改变后,它仍会从根路径请求这些资源,导致404。以下是针对性的解决步骤:
1. 调整Swagger中间件配置
在Program.cs(或Startup.cs的Configure方法)中,同时配置Swagger JSON的路由前缀和Swagger UI的资源路径:
// 配置Swagger JSON的输出路径 app.UseSwagger(options => { options.RouteTemplate = "mynewsite/swagger/{documentName}/swagger.json"; }); // 配置Swagger UI app.UseSwaggerUI(options => { // 设置Swagger UI的访问前缀 options.RoutePrefix = "mynewsite/swagger"; // 指定Swagger JSON的地址(要和上面的RouteTemplate对应) options.SwaggerEndpoint("/mynewsite/swagger/v1/swagger.json", "My API V1"); // 手动注入ABP的静态资源,指定带前缀的路径 options.InjectJavascript("/mynewsite/libs/abp/aspnetcore-mvc-ui-theme-shared/libs/abp/js/abp.js"); options.InjectStylesheet("/mynewsite/libs/abp/aspnetcore-mvc-ui-theme-shared/libs/abp/css/abp.css"); });
2. 配置ABP静态资源的访问前缀
ABP的静态资源默认存放在wwwroot/libs目录下,需要让这些资源能通过/mynewsite/libs路径访问。在ConfigureServices方法中添加:
Configure<AbpStaticAssetOptions>(options => { options.RequestPath = "/mynewsite/libs"; });
如果不想修改全局静态资源路径,也可以额外添加一个静态资源中间件:
app.UseStaticFiles(new StaticFileOptions { RequestPath = "/mynewsite/libs", FileProvider = new PhysicalFileProvider( Path.Combine(WebHostEnvironment.ContentRootPath, "wwwroot/libs")) });
3. 检查中间件顺序
确保中间件的加载顺序正确,按以下顺序排列:
UseSwaggerUseSwaggerUIUseStaticFiles(包括额外添加的静态资源中间件)UseRoutingUseEndpoints
4. 验证并重启
修改完成后,清理浏览器缓存,重启应用,访问/mynewsite/swagger/index.html,此时abp.js的请求路径应该是/mynewsite/libs/abp/.../abp.js,就能正常加载了。
内容的提问来源于stack exchange,提问作者Darth Shirr
相关产品推荐
相关产品推荐

