Browse Source

Show an error page if libs folder is empty.

Resolve #20559
pull/20565/head
maliming 2 years ago
parent
commit
ab75456eff
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 2
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
  2. 11
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsOptions.cs
  3. 73
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsService.cs
  4. 6
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/IAbpMvcLibsService.cs

2
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs

@ -32,6 +32,7 @@ using Volo.Abp.AspNetCore.Mvc.DataAnnotations;
using Volo.Abp.AspNetCore.Mvc.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.Infrastructure;
using Volo.Abp.AspNetCore.Mvc.Json;
using Volo.Abp.AspNetCore.Mvc.Libs;
using Volo.Abp.AspNetCore.Mvc.Localization;
using Volo.Abp.AspNetCore.VirtualFileSystem;
using Volo.Abp.DependencyInjection;
@ -231,6 +232,7 @@ public class AbpAspNetCoreMvcModule : AbpModule
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
AddApplicationParts(context);
context.ServiceProvider.GetRequiredService<IAbpMvcLibsService>().CheckLibs(context);
}
private static void AddApplicationParts(ApplicationInitializationContext context)

11
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsOptions.cs

@ -0,0 +1,11 @@
namespace Volo.Abp.AspNetCore.Mvc.Libs;
public class AbpMvcLibsOptions
{
public bool CheckLibs { get; set; }
public AbpMvcLibsOptions()
{
CheckLibs = true;
}
}

73
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsService.cs

@ -0,0 +1,73 @@
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.Libs;
public class AbpMvcLibsService : IAbpMvcLibsService, ITransientDependency
{
private Task<bool>? _checkLibsTask;
public virtual void CheckLibs(ApplicationInitializationContext context)
{
var options = context.ServiceProvider.GetRequiredService<IOptions<AbpMvcLibsOptions>>().Value;
if (options.CheckLibs)
{
var app = context.GetApplicationBuilder();
app.Use(async (httpContext, next) =>
{
if (!await HandleCheckLibsAsyncOnceAsync(httpContext))
{
httpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
httpContext.Response.ContentType = "text/html";
await httpContext.Response.WriteAsync(
"<html>" +
" <head>" +
" <title>ABP MVC Libs Error</title>" +
" </head>" +
" <body>" +
" <h1>ABP MVC Libs folder is not found!</h1>" +
" <p>Please make sure you have run the <b>abp install-libs</b> command.</p>" +
" <p>For more information, see <a href='https://abp.io/docs/latest/CLI#install-libs'>CLI install-libs</a> document.</p>" +
" </body>" +
"</html>",
Encoding.UTF8
);
return;
}
await next(httpContext);
});
}
}
protected virtual Task<bool> HandleCheckLibsAsyncOnceAsync(HttpContext httpContext)
{
if (_checkLibsTask == null)
{
_checkLibsTask = HandleCheckLibsAsync(httpContext);
}
return _checkLibsTask;
}
protected virtual Task<bool> HandleCheckLibsAsync(HttpContext httpContext)
{
var fileProvider = httpContext.RequestServices.GetRequiredService<IWebHostEnvironment>().WebRootFileProvider;
var abpFiles = new IFileInfo[]
{
fileProvider.GetFileInfo("/libs/abp/core/abp.js"),
fileProvider.GetFileInfo("/libs/abp/core/abp.css")
};
return Task.FromResult(abpFiles.All(abpFile => abpFile.Exists));
}
}

6
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/IAbpMvcLibsService.cs

@ -0,0 +1,6 @@
namespace Volo.Abp.AspNetCore.Mvc.Libs;
public interface IAbpMvcLibsService
{
void CheckLibs(ApplicationInitializationContext context);
}
Loading…
Cancel
Save