diff --git a/src/FacadeCompanyName.FacadeProjectName.DomainService.Share/FacadeCompanyName.FacadeProjectName.DomainService.Share.csproj b/src/FacadeCompanyName.FacadeProjectName.DomainService.Share/FacadeCompanyName.FacadeProjectName.DomainService.Share.csproj
index 89af999..c65ef6d 100644
--- a/src/FacadeCompanyName.FacadeProjectName.DomainService.Share/FacadeCompanyName.FacadeProjectName.DomainService.Share.csproj
+++ b/src/FacadeCompanyName.FacadeProjectName.DomainService.Share/FacadeCompanyName.FacadeProjectName.DomainService.Share.csproj
@@ -13,8 +13,8 @@
-
-
+
+
diff --git a/src/FacadeCompanyName.FacadeProjectName.DomainService/FacadeCompanyName.FacadeProjectName.DomainService.csproj b/src/FacadeCompanyName.FacadeProjectName.DomainService/FacadeCompanyName.FacadeProjectName.DomainService.csproj
index 6b7db8f..3f87414 100644
--- a/src/FacadeCompanyName.FacadeProjectName.DomainService/FacadeCompanyName.FacadeProjectName.DomainService.csproj
+++ b/src/FacadeCompanyName.FacadeProjectName.DomainService/FacadeCompanyName.FacadeProjectName.DomainService.csproj
@@ -27,8 +27,8 @@
-
-
+
+
diff --git a/src/FacadeCompanyName.FacadeProjectName.DomainService/Folders/AppFolders.cs b/src/FacadeCompanyName.FacadeProjectName.DomainService/Folders/AppFolders.cs
new file mode 100644
index 0000000..8399cbc
--- /dev/null
+++ b/src/FacadeCompanyName.FacadeProjectName.DomainService/Folders/AppFolders.cs
@@ -0,0 +1,11 @@
+using Abp.Dependency;
+
+namespace FacadeCompanyName.FacadeProjectName.DomainService.Folders
+{
+ public class AppFolders : IAppFolders, ISingletonDependency
+ {
+ public string TempFileUploadFolder { get; set; }
+ public string TempFileDownloadFolder { get; set; }
+ public string FileUploadFolder { get; set; }
+ }
+}
diff --git a/src/FacadeCompanyName.FacadeProjectName.DomainService/Folders/IAppFolders.cs b/src/FacadeCompanyName.FacadeProjectName.DomainService/Folders/IAppFolders.cs
new file mode 100644
index 0000000..89f216b
--- /dev/null
+++ b/src/FacadeCompanyName.FacadeProjectName.DomainService/Folders/IAppFolders.cs
@@ -0,0 +1,19 @@
+namespace FacadeCompanyName.FacadeProjectName.DomainService.Folders
+{
+ public interface IAppFolders
+ {
+ ///
+ /// 临时文件下载文件夹 /downloads/temps
+ ///
+ string TempFileDownloadFolder { get; }
+ ///
+ /// 临时文件上传文件夹 /uploads/temps
+ ///
+ string TempFileUploadFolder { get; }
+
+ ///
+ /// 文件上传后保存的路径 /uploads/
+ ///
+ string FileUploadFolder { get; }
+ }
+}
diff --git a/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Interceptors/InterceptorRegistrar.cs b/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Interceptors/InterceptorRegistrar.cs
new file mode 100644
index 0000000..20838c7
--- /dev/null
+++ b/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Interceptors/InterceptorRegistrar.cs
@@ -0,0 +1,40 @@
+using Castle.Core;
+using Castle.MicroKernel;
+using System;
+using System.Linq;
+
+namespace FacadeCompanyName.FacadeProjectName.Oracle.EntityFrameworkCore.Interceptors
+{
+ public class InterceptorRegistrar
+ {
+ public static void Initialize(IKernel kernel)
+ {
+ kernel.ComponentRegistered += Kernel_ComponentRegistered;
+ }
+
+ private static void Kernel_ComponentRegistered(string key, IHandler handler)
+ {
+ if (JobShouldIntercept(handler.ComponentModel.Implementation))
+ {
+ handler.ComponentModel.Interceptors.Add(new InterceptorReference(typeof(RepositoryInterceptor)));
+ }
+
+
+ }
+ private static bool JobShouldIntercept(Type type)
+ {
+
+ //if (type.GetTypeInfo().IsDefined(typeof(JobInterceptorAttribute), true))
+ //{
+ // return true;
+ //}
+
+ if (type.GetMethods().Any(m => m.IsDefined(typeof(RepositoryInterceptorAttribute), true)))
+ {
+ return true;
+ }
+
+ return false;
+ }
+ }
+}
diff --git a/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Interceptors/RepositoryInterceptor.cs b/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Interceptors/RepositoryInterceptor.cs
new file mode 100644
index 0000000..b64ec0c
--- /dev/null
+++ b/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Interceptors/RepositoryInterceptor.cs
@@ -0,0 +1,118 @@
+using Abp.Dependency;
+using Abp.Json;
+using Abp.Threading;
+using Castle.Core.Logging;
+using Castle.DynamicProxy;
+using FacadeCompanyName.FacadeProjectName.DomainService.Share;
+using System;
+using System.Reflection;
+using System.Threading.Tasks;
+
+namespace FacadeCompanyName.FacadeProjectName.Oracle.EntityFrameworkCore.Interceptors
+{
+ public class RepositoryInterceptor : IInterceptor
+ {
+ private readonly ILogger _logger;
+
+ public RepositoryInterceptor()
+ {
+ _logger = IocManager.Instance.Resolve();
+ }
+
+ public void Intercept(IInvocation invocation)
+ {
+ if (!ShouldIntercept(invocation.MethodInvocationTarget))
+ {
+ invocation.Proceed();
+ return;
+ }
+
+ if (invocation.Method.IsAsync())
+ {
+ PerformAsync(invocation);
+ }
+ else
+ {
+ PerformSync(invocation);
+ }
+ }
+
+ private void PerformSync(IInvocation invocation)
+ {
+ var fullName = invocation.Method.DeclaringType.FullName + "." + invocation.Method.Name;
+ try
+ {
+ invocation.Proceed();
+ }
+ catch (Exception ex)
+ {
+ ExceptionHanding(ex, fullName, invocation.Arguments);
+ }
+ }
+
+ private void PerformAsync(IInvocation invocation)
+ {
+ var fullName = invocation.Method.DeclaringType.FullName + "." + invocation.Method.Name;
+ PerformSync(invocation);
+
+ if (invocation.Method.ReturnType == typeof(Task))
+ {
+ invocation.ReturnValue = InternalAsyncHelper.AwaitTaskWithFinally(
+ (Task)invocation.ReturnValue,
+ ex =>
+ {
+ ExceptionHanding(ex, fullName, invocation.Arguments);
+ });
+ }
+ else //Task
+ {
+ invocation.ReturnValue = InternalAsyncHelper.CallAwaitTaskWithFinallyAndGetResult(
+ invocation.Method.ReturnType.GenericTypeArguments[0],
+ invocation.ReturnValue,
+ ex =>
+ {
+ ExceptionHanding(ex, fullName, invocation.Arguments);
+ });
+ }
+ }
+
+ private void ExceptionHanding(Exception ex, string fullName, object args)
+ {
+ if (ex != null)
+ {
+ _logger.Error(ex.Message + $"\r\n{fullName}:\r\n" + args.ToJsonString().Replace("\r\n", " "), ex);
+ throw ex;
+ }
+ }
+
+
+ private bool ShouldIntercept(MethodInfo methodInfo)
+ {
+ if (methodInfo == null)
+ {
+ return false;
+ }
+
+ if (!methodInfo.IsPublic)
+ {
+ return false;
+ }
+
+ if (methodInfo.IsDefined(typeof(RepositoryInterceptorAttribute), true))
+ {
+ return true;
+ }
+
+ //var classType = methodInfo.DeclaringType;
+ //if (classType != null)
+ //{
+ // if (classType.GetTypeInfo().IsDefined(typeof(JobInterceptorAttribute), true))
+ // {
+ // return true;
+ // }
+ //}
+
+ return false;
+ }
+ }
+}
diff --git a/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Interceptors/RepositoryInterceptorAttribute.cs b/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Interceptors/RepositoryInterceptorAttribute.cs
new file mode 100644
index 0000000..88b162b
--- /dev/null
+++ b/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Interceptors/RepositoryInterceptorAttribute.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace FacadeCompanyName.FacadeProjectName.Oracle.EntityFrameworkCore.Interceptors
+{
+ [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
+ public class RepositoryInterceptorAttribute : Attribute
+ {
+ }
+}
diff --git a/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Repositories/AppQueryRepository.cs b/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Repositories/AppQueryRepository.cs
index 95c7b43..69411c9 100644
--- a/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Repositories/AppQueryRepository.cs
+++ b/src/FacadeCompanyName.FacadeProjectName.Oracle/EntityFrameworkCore/Repositories/AppQueryRepository.cs
@@ -1,14 +1,64 @@
-using Facade.Dapper;
-using Facade.Dapper.Oracle;
-using FacadeCompanyName.FacadeProjectName.DomainService.Share;
-
-namespace FacadeCompanyName.FacadeProjectName.Oracle.EntityFrameworkCore.Repositories
-{
- public class AppQueryRepository : OracleQueryRepository, IAppQueryRepository
- {
- public AppQueryRepository(IFacadeConnectionProvider facadeConnectionProvider)
- : base(facadeConnectionProvider)
- {
- }
- }
-}
+using Dapper;
+using Facade.Dapper;
+using Facade.Dapper.Oracle;
+using FacadeCompanyName.FacadeProjectName.DomainService.Share;
+using FacadeCompanyName.FacadeProjectName.Oracle.EntityFrameworkCore.Interceptors;
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace FacadeCompanyName.FacadeProjectName.Oracle.EntityFrameworkCore.Repositories
+{
+ public class AppQueryRepository : OracleQueryRepository, IAppQueryRepository
+ {
+ public AppQueryRepository(IFacadeConnectionProvider facadeConnectionProvider)
+ : base(facadeConnectionProvider)
+ {
+ }
+ [RepositoryInterceptor]
+ public override Task ExecuteAsync(string query, object param = null)
+ {
+ return base.ExecuteAsync(query, param);
+ }
+ [RepositoryInterceptor]
+ public override Task ExecuteScalarAsync(string query, object param = null)
+ {
+ return base.ExecuteScalarAsync(query, param);
+ }
+ [RepositoryInterceptor]
+ public override Task> QueryAsync(string query, object param = null)
+ {
+ return base.QueryAsync(query, param);
+ }
+ [RepositoryInterceptor]
+ public override Task> QueryAsync(string query, Func map, object param = null)
+ {
+ return base.QueryAsync(query, map, param);
+ }
+ [RepositoryInterceptor]
+ public override Task> QueryAsync(string query, Func map, object param = null)
+ {
+ return base.QueryAsync(query, map, param);
+ }
+ [RepositoryInterceptor]
+ public override Task> QueryAsync(string query, Func map, object param = null)
+ {
+ return base.QueryAsync(query, map, param);
+ }
+ [RepositoryInterceptor]
+ public override Task QueryFirstOrDefaultAsync(string query, object param = null)
+ {
+ return base.QueryFirstOrDefaultAsync(query, param);
+ }
+ [RepositoryInterceptor]
+ public override Task QueryMultipleAsync(string query, object param = null)
+ {
+ return base.QueryMultipleAsync(query, param);
+ }
+ [RepositoryInterceptor]
+ public override Task<(IEnumerable list, int totalCount)> PagedAsync(string query, int currentPage = 1, int pageCount = 10, object param = null)
+ {
+ return base.PagedAsync(query, currentPage, pageCount, param);
+ }
+ }
+}
diff --git a/src/FacadeCompanyName.FacadeProjectName.Oracle/FacadeProjectNameOracleModule.cs b/src/FacadeCompanyName.FacadeProjectName.Oracle/FacadeProjectNameOracleModule.cs
index b761728..9c764cf 100644
--- a/src/FacadeCompanyName.FacadeProjectName.Oracle/FacadeProjectNameOracleModule.cs
+++ b/src/FacadeCompanyName.FacadeProjectName.Oracle/FacadeProjectNameOracleModule.cs
@@ -1,29 +1,32 @@
-using Abp.Modules;
-using Abp.Reflection.Extensions;
-using FacadeCompanyName.FacadeProjectName.DomainService.Share;
-using System.Collections.Generic;
-using System.Reflection;
-
-namespace FacadeCompanyName.FacadeProjectName.Oracle
-{
- [DependsOn(
- typeof(FacadeProjectNameDomainServiceShareModule)
- )]
- public class FacadeProjectNameOracleModule : AbpModule
- {
-
- public FacadeProjectNameOracleModule()
- {
- }
- public override void PreInitialize()
- {
- }
-
- public override void Initialize()
- {
- IocManager.RegisterAssemblyByConvention(typeof(FacadeProjectNameOracleModule).GetAssembly());
- DapperExtensions.DapperExtensions.SetMappingAssemblies(new List { typeof(FacadeProjectNameOracleModule).GetAssembly() });
- }
-
- }
-}
+using Abp.Modules;
+using Abp.Reflection.Extensions;
+using FacadeCompanyName.FacadeProjectName.DomainService.Share;
+using FacadeCompanyName.FacadeProjectName.Oracle.EntityFrameworkCore.Interceptors;
+using System.Collections.Generic;
+using System.Reflection;
+
+namespace FacadeCompanyName.FacadeProjectName.Oracle
+{
+ [DependsOn(
+ typeof(FacadeProjectNameDomainServiceShareModule)
+ )]
+ public class FacadeProjectNameOracleModule : AbpModule
+ {
+
+ public FacadeProjectNameOracleModule()
+ {
+ }
+ public override void PreInitialize()
+ {
+ //注册拦截器
+ InterceptorRegistrar.Initialize(IocManager.IocContainer.Kernel);
+ }
+
+ public override void Initialize()
+ {
+ IocManager.RegisterAssemblyByConvention(typeof(FacadeProjectNameOracleModule).GetAssembly());
+ DapperExtensions.DapperExtensions.SetMappingAssemblies(new List { typeof(FacadeProjectNameOracleModule).GetAssembly() });
+ }
+
+ }
+}
diff --git a/src/FacadeCompanyName.FacadeProjectName.Web.Host/FacadeCompanyName.FacadeProjectName.Web.Host.csproj b/src/FacadeCompanyName.FacadeProjectName.Web.Host/FacadeCompanyName.FacadeProjectName.Web.Host.csproj
index 3cc3d8f..d12b1fa 100644
--- a/src/FacadeCompanyName.FacadeProjectName.Web.Host/FacadeCompanyName.FacadeProjectName.Web.Host.csproj
+++ b/src/FacadeCompanyName.FacadeProjectName.Web.Host/FacadeCompanyName.FacadeProjectName.Web.Host.csproj
@@ -23,12 +23,12 @@
-
-
-
+
+
+
-
+
diff --git a/src/FacadeCompanyName.FacadeProjectName.Web.Host/FacadeProjectNameWebHostModule.cs b/src/FacadeCompanyName.FacadeProjectName.Web.Host/FacadeProjectNameWebHostModule.cs
index 1b1d6cf..28ef872 100644
--- a/src/FacadeCompanyName.FacadeProjectName.Web.Host/FacadeProjectNameWebHostModule.cs
+++ b/src/FacadeCompanyName.FacadeProjectName.Web.Host/FacadeProjectNameWebHostModule.cs
@@ -1,4 +1,5 @@
-using Abp.Modules;
+using Abp.IO;
+using Abp.Modules;
using Abp.Reflection.Extensions;
using Facade.AspNetCore;
using Facade.AspNetCore.Configuration;
@@ -6,12 +7,14 @@
using Facade.AspNetCore.Zero;
using Facade.Core.Configuration;
using FacadeCompanyName.FacadeProjectName.Application;
+using FacadeCompanyName.FacadeProjectName.DomainService.Folders;
using FacadeCompanyName.FacadeProjectName.DomainService.Share;
using FacadeCompanyName.FacadeProjectName.Web.Host.Authentication.JwtBearer;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using System;
+using System.IO;
using System.Text;
namespace FacadeCompanyName.FacadeProjectName.Web.Host
@@ -46,6 +49,7 @@ public override void PreInitialize()
var facadeConfiguration = IocManager.Resolve();
_appConfiguration.GetSection("FacadeConfiguration").Bind(facadeConfiguration);
+ Configuration.Auditing.IsEnabled = false;
Configuration.Auditing.IsEnabledForAnonymousUsers = true;
Configuration.BackgroundJobs.IsJobExecutionEnabled = false;
Configuration.MultiTenancy.IsEnabled = FacadeProjectNameConsts.MultiTenancyEnabled;
@@ -57,6 +61,11 @@ public override void PreInitialize()
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(typeof(FacadeProjectNameWebHostModule).GetAssembly());
+ }
+ public override void PostInitialize()
+ {
+ SetAppFolders();
+ // StartQuartz();
}
private void ConfigureTokenAuth()
{
@@ -67,7 +76,23 @@ private void ConfigureTokenAuth()
tokenAuthConfig.Issuer = _appConfiguration["Authentication:JwtBearer:Issuer"];
tokenAuthConfig.Audience = _appConfiguration["Authentication:JwtBearer:Audience"];
tokenAuthConfig.SigningCredentials = new SigningCredentials(tokenAuthConfig.SecurityKey, SecurityAlgorithms.HmacSha256);
- tokenAuthConfig.Expiration = TimeSpan.FromDays(1);
+ tokenAuthConfig.Expiration = TimeSpan.FromDays(30);
+ }
+ private void SetAppFolders()
+ {
+ var appFolders = IocManager.Resolve();
+
+ appFolders.FileUploadFolder = Path.Combine(_env.WebRootPath, "uploads");
+ appFolders.TempFileUploadFolder = Path.Combine(_env.WebRootPath, "uploads", "temps");
+ appFolders.TempFileDownloadFolder = Path.Combine(_env.WebRootPath, "downloads", "temps");
+
+ try
+ {
+ DirectoryHelper.CreateIfNotExists(appFolders.FileUploadFolder);
+ DirectoryHelper.CreateIfNotExists(appFolders.TempFileUploadFolder);
+ DirectoryHelper.CreateIfNotExists(appFolders.TempFileDownloadFolder);
+ }
+ catch { }
}
}
}
diff --git a/src/FacadeCompanyName.FacadeProjectName.Web.Host/Program.cs b/src/FacadeCompanyName.FacadeProjectName.Web.Host/Program.cs
index a39c664..753effc 100644
--- a/src/FacadeCompanyName.FacadeProjectName.Web.Host/Program.cs
+++ b/src/FacadeCompanyName.FacadeProjectName.Web.Host/Program.cs
@@ -1,24 +1,34 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore;
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
-
-namespace FacadeCompanyName.FacadeProjectName.Web.Host
-{
- public class Program
- {
- public static void Main(string[] args)
- {
- CreateWebHostBuilder(args).Build().Run();
- }
-
- public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
- WebHost.CreateDefaultBuilder(args)
- .UseStartup();
- }
-}
+using Microsoft.AspNetCore;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using System.IO;
+
+namespace FacadeCompanyName.FacadeProjectName.Web.Host
+{
+ public class Program
+ {
+ private const string urls = "server.urls";
+ public static void Main(string[] args)
+ {
+ CreateWebHostBuilder(args).Build().Run();
+ }
+
+ public static IWebHostBuilder CreateWebHostBuilder(string[] args)
+ {
+ var config = new ConfigurationBuilder()
+ .SetBasePath(Directory.GetCurrentDirectory())
+ .AddJsonFile("hosting.json", optional: true)
+ .Build();
+ string url = config[urls] ?? "http://*:21021";
+
+ return WebHost.CreateDefaultBuilder(args)
+ .UseUrls(url)
+ .UseStartup()
+ .UseKestrel(options =>
+ {
+ options.Limits.MaxRequestBodySize = null;
+ options.Limits.MaxRequestBufferSize = null;
+ });
+ }
+ }
+}
diff --git a/test/FacadeCompanyName.FacadeProjectName.Tests/FacadeCompanyName.FacadeProjectName.Tests.csproj b/test/FacadeCompanyName.FacadeProjectName.Tests/FacadeCompanyName.FacadeProjectName.Tests.csproj
index 6a64b46..0103be7 100644
--- a/test/FacadeCompanyName.FacadeProjectName.Tests/FacadeCompanyName.FacadeProjectName.Tests.csproj
+++ b/test/FacadeCompanyName.FacadeProjectName.Tests/FacadeCompanyName.FacadeProjectName.Tests.csproj
@@ -7,7 +7,7 @@
-
+