diff --git a/.github/workflows/main.yml b/.github/workflows/build-and-test.yml
similarity index 96%
rename from .github/workflows/main.yml
rename to .github/workflows/build-and-test.yml
index e33a07a197..395f88351a 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/build-and-test.yml
@@ -1,4 +1,4 @@
-name: "Main"
+name: "build and test"
on:
pull_request:
paths:
diff --git a/README.md b/README.md
index 14b044f8b1..72a47ddc4b 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,9 @@
# ABP
-[](http://ci.volosoft.com:5480/blue/organizations/jenkins/abp/activity)
+
[](https://www.nuget.org/packages/Volo.Abp.Core)
-[](https://www.nuget.org/packages/Volo.Abp.Core)
[](https://docs.abp.io/en/abp/latest/Nightly-Builds)
+[](https://www.nuget.org/packages/Volo.Abp.Core)
This project is the next generation of the [ASP.NET Boilerplate](https://aspnetboilerplate.com/) web application framework. See [the announcement](https://blog.abp.io/abp/Abp-vNext-Announcement).
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
index 14a4eb345c..46cd1cb470 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
@@ -127,7 +127,7 @@
"Generate": "Generate",
"MissingQuantityField": "The quantity field is required!",
"MissingPriceField": "The Price field is required!",
- "CodeUsageStatus": "Code Usage Status",
+ "CodeUsageStatus": "Status",
"Country": "Country",
"DeveloperCount": "Developer Count",
"RequestCode": "Request Code",
@@ -147,6 +147,7 @@
"EmailSent": "Email Sent",
"SuccessfullySent": "Successfully Sent",
"SuccessfullyDeleted": "Successfully Deleted",
- "DiscountRequestDeletionWarningMessage": "Discount request will be deleted"
+ "DiscountRequestDeletionWarningMessage": "Discount request will be deleted" ,
+ "BusinessType": "Business Type"
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JQueryFormScriptContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JQueryFormScriptContributor.cs
new file mode 100644
index 0000000000..ca131c8aac
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JQueryFormScriptContributor.cs
@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
+using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery;
+using Volo.Abp.Modularity;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.JsTree
+{
+ [DependsOn(typeof(JQueryScriptContributor))]
+ public class JsTreeScriptContributor : BundleContributor
+ {
+ public override void ConfigureBundle(BundleConfigurationContext context)
+ {
+ context.Files.AddIfNotContains("/libs/jstree/jstree.min.js");
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JsTreeOptions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JsTreeOptions.cs
new file mode 100644
index 0000000000..d1dbe812bf
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JsTreeOptions.cs
@@ -0,0 +1,13 @@
+namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.JsTree
+{
+ public class JsTreeOptions
+ {
+ ///
+ /// Path of the style file for the JsTree library.
+ /// Setting to null ignores the style file.
+ ///
+ /// Default value: "/libs/jstree/themes/default/style.min.css".
+ ///
+ public string StylePath { get; set; } = "/libs/jstree/themes/default/style.min.css";
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JsTreeStyleContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JsTreeStyleContributor.cs
new file mode 100644
index 0000000000..5944310c2c
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JsTreeStyleContributor.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.JsTree
+{
+ public class JsTreeStyleContributor : BundleContributor
+ {
+ public override void ConfigureBundle(BundleConfigurationContext context)
+ {
+ var options = context
+ .ServiceProvider
+ .GetRequiredService>()
+ .Value;
+
+ if (options.StylePath.IsNullOrEmpty())
+ {
+ return;
+ }
+
+ context.Files.AddIfNotContains(options.StylePath);
+ }
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js
index 21a8e0ce21..cc4122a373 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js
@@ -95,8 +95,11 @@ $.validator.defaults.ignore = ''; //TODO: Would be better if we can apply only f
});
_$modal.on('shown.bs.modal', function () {
- //focuses first element if it's a typeable input.
+ //focuses first element if it's a typeable input.
var $firstVisibleInput = _$modal.find('input:not([type=hidden]):first');
+
+ _onOpenCallbacks.triggerAll(_publicApi);
+
if ($firstVisibleInput.hasClass("datepicker")) {
return; //don't pop-up date pickers...
}
@@ -107,7 +110,6 @@ $.validator.defaults.ignore = ''; //TODO: Would be better if we can apply only f
}
$firstVisibleInput.focus();
- _onOpenCallbacks.triggerAll(_publicApi);
});
var modalClass = abp.modals[options.modalClass];
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/RazorPages/AbpPageModel.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/RazorPages/AbpPageModel.cs
index 8d62a4e188..db7b9041b7 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/RazorPages/AbpPageModel.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/RazorPages/AbpPageModel.cs
@@ -11,6 +11,7 @@ using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc.UI.Alerts;
using Volo.Abp.AspNetCore.Mvc.Validation;
using Volo.Abp.Guids;
+using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Settings;
@@ -90,17 +91,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.RazorPages
{
if (_localizer == null)
{
- if (LocalizationResourceType == null)
- {
- throw new AbpException($"{nameof(LocalizationResourceType)} should be set before using the {nameof(L)} object!");
- }
-
- _localizer = StringLocalizerFactory.Create(LocalizationResourceType);
+ _localizer = CreateLocalizer();
}
return _localizer;
}
}
+
private IStringLocalizer _localizer;
protected Type LocalizationResourceType { get; set; }
@@ -152,5 +149,21 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.RazorPages
TempData = TempData
};
}
+
+ protected virtual IStringLocalizer CreateLocalizer()
+ {
+ if (LocalizationResourceType != null)
+ {
+ return StringLocalizerFactory.Create(LocalizationResourceType);
+ }
+
+ var localizer = StringLocalizerFactory.CreateDefaultOrNull();
+ if (localizer == null)
+ {
+ throw new AbpException($"Set {nameof(LocalizationResourceType)} or define the default localization resource type (by configuring the {nameof(AbpLocalizationOptions)}.{nameof(AbpLocalizationOptions.DefaultResourceType)}) to be able to use the {nameof(L)} object!");
+ }
+
+ return localizer;
+ }
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpController.cs
index 2a3a25373e..52f01e0b2c 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpController.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpController.cs
@@ -101,7 +101,18 @@ namespace Volo.Abp.AspNetCore.Mvc
public IStringLocalizerFactory StringLocalizerFactory => LazyGetRequiredService(ref _stringLocalizerFactory);
private IStringLocalizerFactory _stringLocalizerFactory;
- public IStringLocalizer L => _localizer ?? (_localizer = StringLocalizerFactory.Create(LocalizationResource));
+ public IStringLocalizer L
+ {
+ get
+ {
+ if (_localizer == null)
+ {
+ _localizer = CreateLocalizer();
+ }
+
+ return _localizer;
+ }
+ }
private IStringLocalizer _localizer;
protected Type LocalizationResource
@@ -121,5 +132,21 @@ namespace Volo.Abp.AspNetCore.Mvc
{
ModelValidator?.Validate(ModelState);
}
+
+ protected virtual IStringLocalizer CreateLocalizer()
+ {
+ if (LocalizationResource != null)
+ {
+ return StringLocalizerFactory.Create(LocalizationResource);
+ }
+
+ var localizer = StringLocalizerFactory.CreateDefaultOrNull();
+ if (localizer == null)
+ {
+ throw new AbpException($"Set {nameof(LocalizationResource)} or define the default localization resource type (by configuring the {nameof(AbpLocalizationOptions)}.{nameof(AbpLocalizationOptions.DefaultResourceType)}) to be able to use the {nameof(L)} object!");
+ }
+
+ return localizer;
+ }
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.SignalR/Volo/Abp/AspNetCore/SignalR/AbpHub.cs b/framework/src/Volo.Abp.AspNetCore.SignalR/Volo/Abp/AspNetCore/SignalR/AbpHub.cs
index a1dc1437ea..0a58adf098 100644
--- a/framework/src/Volo.Abp.AspNetCore.SignalR/Volo/Abp/AspNetCore/SignalR/AbpHub.cs
+++ b/framework/src/Volo.Abp.AspNetCore.SignalR/Volo/Abp/AspNetCore/SignalR/AbpHub.cs
@@ -57,7 +57,18 @@ namespace Volo.Abp.AspNetCore.SignalR
public IStringLocalizerFactory StringLocalizerFactory => LazyGetRequiredService(ref _stringLocalizerFactory);
private IStringLocalizerFactory _stringLocalizerFactory;
- public IStringLocalizer L => _localizer ?? (_localizer = StringLocalizerFactory.Create(LocalizationResource));
+ public IStringLocalizer L
+ {
+ get
+ {
+ if (_localizer == null)
+ {
+ _localizer = CreateLocalizer();
+ }
+
+ return _localizer;
+ }
+ }
private IStringLocalizer _localizer;
protected Type LocalizationResource
@@ -70,6 +81,22 @@ namespace Volo.Abp.AspNetCore.SignalR
}
}
private Type _localizationResource = typeof(DefaultResource);
+
+ protected virtual IStringLocalizer CreateLocalizer()
+ {
+ if (LocalizationResource != null)
+ {
+ return StringLocalizerFactory.Create(LocalizationResource);
+ }
+
+ var localizer = StringLocalizerFactory.CreateDefaultOrNull();
+ if (localizer == null)
+ {
+ throw new AbpException($"Set {nameof(LocalizationResource)} or define the default localization resource type (by configuring the {nameof(AbpLocalizationOptions)}.{nameof(AbpLocalizationOptions.DefaultResourceType)}) to be able to use the {nameof(L)} object!");
+ }
+
+ return localizer;
+ }
}
public abstract class AbpHub : Hub
@@ -118,7 +145,18 @@ namespace Volo.Abp.AspNetCore.SignalR
public IStringLocalizerFactory StringLocalizerFactory => LazyGetRequiredService(ref _stringLocalizerFactory);
private IStringLocalizerFactory _stringLocalizerFactory;
- public IStringLocalizer L => _localizer ?? (_localizer = StringLocalizerFactory.Create(LocalizationResource));
+ public IStringLocalizer L
+ {
+ get
+ {
+ if (_localizer == null)
+ {
+ _localizer = CreateLocalizer();
+ }
+
+ return _localizer;
+ }
+ }
private IStringLocalizer _localizer;
protected Type LocalizationResource
@@ -131,5 +169,21 @@ namespace Volo.Abp.AspNetCore.SignalR
}
}
private Type _localizationResource = typeof(DefaultResource);
+
+ protected virtual IStringLocalizer CreateLocalizer()
+ {
+ if (LocalizationResource != null)
+ {
+ return StringLocalizerFactory.Create(LocalizationResource);
+ }
+
+ var localizer = StringLocalizerFactory.CreateDefaultOrNull();
+ if (localizer == null)
+ {
+ throw new AbpException($"Set {nameof(LocalizationResource)} or define the default localization resource type (by configuring the {nameof(AbpLocalizationOptions)}.{nameof(AbpLocalizationOptions.DefaultResourceType)}) to be able to use the {nameof(L)} object!");
+ }
+
+ return localizer;
+ }
}
}
diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingHelper.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingHelper.cs
index e53ba5b9a6..4c3ede4ca8 100644
--- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingHelper.cs
+++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingHelper.cs
@@ -36,7 +36,7 @@ namespace Volo.Abp.Auditing
IClock clock,
IAuditingStore auditingStore,
ILogger logger,
- IServiceProvider serviceProvider,
+ IServiceProvider serviceProvider,
ICorrelationIdProvider correlationIdProvider)
{
Options = options.Value;
@@ -77,9 +77,10 @@ namespace Volo.Abp.Auditing
var classType = methodInfo.DeclaringType;
if (classType != null)
{
- if (AuditingInterceptorRegistrar.ShouldAuditTypeByDefault(classType))
+ var shouldAudit = AuditingInterceptorRegistrar.ShouldAuditTypeByDefaultOrNull(classType);
+ if (shouldAudit != null)
{
- return true;
+ return shouldAudit.Value;
}
}
@@ -123,7 +124,7 @@ namespace Volo.Abp.Auditing
return defaultValue;
}
-
+
public virtual AuditLogInfo CreateAuditLogInfo()
{
var auditInfo = new AuditLogInfo
@@ -147,8 +148,8 @@ namespace Volo.Abp.Auditing
public virtual AuditLogActionInfo CreateAuditLogAction(
AuditLogInfo auditLog,
- Type type,
- MethodInfo method,
+ Type type,
+ MethodInfo method,
object[] arguments)
{
return CreateAuditLogAction(auditLog, type, method, CreateArgumentsDictionary(method, arguments));
@@ -156,8 +157,8 @@ namespace Volo.Abp.Auditing
public virtual AuditLogActionInfo CreateAuditLogAction(
AuditLogInfo auditLog,
- Type type,
- MethodInfo method,
+ Type type,
+ MethodInfo method,
IDictionary arguments)
{
var actionInfo = new AuditLogActionInfo
@@ -240,4 +241,4 @@ namespace Volo.Abp.Auditing
return dictionary;
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptorRegistrar.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptorRegistrar.cs
index a407335f3d..54607a55ca 100644
--- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptorRegistrar.cs
+++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptorRegistrar.cs
@@ -21,8 +21,8 @@ namespace Volo.Abp.Auditing
{
return false;
}
-
- if (ShouldAuditTypeByDefault(type))
+
+ if (ShouldAuditTypeByDefaultOrNull(type) == true)
{
return true;
}
@@ -36,7 +36,7 @@ namespace Volo.Abp.Auditing
}
//TODO: Move to a better place
- public static bool ShouldAuditTypeByDefault(Type type)
+ public static bool? ShouldAuditTypeByDefaultOrNull(Type type)
{
//TODO: In an inheritance chain, it would be better to check the attributes on the top class first.
@@ -55,7 +55,7 @@ namespace Volo.Abp.Auditing
return true;
}
- return false;
+ return null;
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs
index 32c90677b8..552aae426d 100644
--- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs
+++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs
@@ -109,7 +109,18 @@ namespace Volo.Abp.Application.Services
public IStringLocalizerFactory StringLocalizerFactory => LazyGetRequiredService(ref _stringLocalizerFactory);
private IStringLocalizerFactory _stringLocalizerFactory;
- public IStringLocalizer L => _localizer ?? (_localizer = StringLocalizerFactory.Create(LocalizationResource));
+ public IStringLocalizer L
+ {
+ get
+ {
+ if (_localizer == null)
+ {
+ _localizer = CreateLocalizer();
+ }
+
+ return _localizer;
+ }
+ }
private IStringLocalizer _localizer;
protected Type LocalizationResource
@@ -147,5 +158,21 @@ namespace Volo.Abp.Application.Services
await AuthorizationService.CheckAsync(policyName);
}
+
+ protected virtual IStringLocalizer CreateLocalizer()
+ {
+ if (LocalizationResource != null)
+ {
+ return StringLocalizerFactory.Create(LocalizationResource);
+ }
+
+ var localizer = StringLocalizerFactory.CreateDefaultOrNull();
+ if (localizer == null)
+ {
+ throw new AbpException($"Set {nameof(LocalizationResource)} or define the default localization resource type (by configuring the {nameof(AbpLocalizationOptions)}.{nameof(AbpLocalizationOptions.DefaultResourceType)}) to be able to use the {nameof(L)} object!");
+ }
+
+ return localizer;
+ }
}
}
\ No newline at end of file
diff --git a/npm/packs/jstree/abp.resourcemapping.js b/npm/packs/jstree/abp.resourcemapping.js
new file mode 100644
index 0000000000..89b3e09d64
--- /dev/null
+++ b/npm/packs/jstree/abp.resourcemapping.js
@@ -0,0 +1,5 @@
+module.exports = {
+ mappings: {
+ "@node_modules/jstree/dist/**/*.*": "@libs/jstree/"
+ }
+}
\ No newline at end of file
diff --git a/npm/packs/jstree/package.json b/npm/packs/jstree/package.json
new file mode 100644
index 0000000000..feee4a81e2
--- /dev/null
+++ b/npm/packs/jstree/package.json
@@ -0,0 +1,12 @@
+{
+ "version": "2.7.0",
+ "name": "@abp/jstree",
+ "publishConfig": {
+ "access": "public"
+ },
+ "dependencies": {
+ "@abp/jquery": "^2.7.0",
+ "jstree": "^3.3.9"
+ },
+ "gitHead": "0ea3895f3b0b489e3ea81fc88f8f0896b22b61bd"
+}
diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs
index 08b6689cea..095f3c5ddc 100644
--- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs
+++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs
@@ -95,12 +95,12 @@ namespace AuthServer.Host
app.UseCorrelationId();
app.UseVirtualFiles();
app.UseRouting();
+ app.UseAbpRequestLocalization();
if (MsDemoConsts.IsMultiTenancyEnabled)
{
app.UseMultiTenancy();
}
app.UseIdentityServer();
- app.UseAbpRequestLocalization();
app.UseAuditing();
app.UseConfiguredEndpoints();
diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs
index b0aba5af53..b351a33fb6 100644
--- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs
+++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using Microsoft.AspNetCore.Authentication.OAuth.Claims;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.DataProtection;
@@ -119,12 +119,14 @@ namespace BackendAdminApp.Host
app.UseVirtualFiles();
app.UseRouting();
app.UseAuthentication();
+
if (MsDemoConsts.IsMultiTenancyEnabled)
{
app.UseMultiTenancy();
}
- app.UseAuthorization();
+
app.UseAbpRequestLocalization();
+ app.UseAuthorization();
app.UseSwagger();
app.UseSwaggerUI(options =>
{
diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSiteHostModule.cs b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSiteHostModule.cs
index bc0bb83021..e1c0b8c215 100644
--- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSiteHostModule.cs
+++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSiteHostModule.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using Microsoft.AspNetCore.Authentication.OAuth.Claims;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.DataProtection;
@@ -97,12 +97,14 @@ namespace PublicWebSite.Host
app.UseVirtualFiles();
app.UseRouting();
app.UseAuthentication();
+
if (MsDemoConsts.IsMultiTenancyEnabled)
{
app.UseMultiTenancy();
}
- app.UseAuthorization();
+
app.UseAbpRequestLocalization();
+ app.UseAuthorization();
app.UseConfiguredEndpoints();
}
}
diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingServiceHostModule.cs b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingServiceHostModule.cs
index 692d4c3d61..bc9209c72a 100644
--- a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingServiceHostModule.cs
+++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingServiceHostModule.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -136,10 +136,12 @@ namespace BloggingService.Host
currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer))));
await next();
});
+
if (MsDemoConsts.IsMultiTenancyEnabled)
{
app.UseMultiTenancy();
}
+
app.UseAbpRequestLocalization(); //TODO: localization?
app.UseSwagger();
app.UseSwaggerUI(options =>
diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityServiceHostModule.cs b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityServiceHostModule.cs
index 982f4c09af..457950cba4 100644
--- a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityServiceHostModule.cs
+++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityServiceHostModule.cs
@@ -1,4 +1,4 @@
-using System.Collections.Generic;
+using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using Microsoft.AspNetCore.Builder;
@@ -102,10 +102,12 @@ namespace IdentityService.Host
app.UseVirtualFiles();
app.UseRouting();
app.UseAuthentication();
+
if (MsDemoConsts.IsMultiTenancyEnabled)
{
app.UseMultiTenancy();
}
+
app.Use(async (ctx, next) =>
{
var currentPrincipalAccessor = ctx.RequestServices.GetRequiredService();
@@ -120,7 +122,6 @@ namespace IdentityService.Host
currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer))));
await next();
});
-
app.UseAbpRequestLocalization(); //TODO: localization?
app.UseSwagger();
app.UseSwaggerUI(options =>
diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductServiceHostModule.cs b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductServiceHostModule.cs
index 44e23eeb78..4968ce75a4 100644
--- a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductServiceHostModule.cs
+++ b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductServiceHostModule.cs
@@ -1,4 +1,4 @@
-using System.Collections.Generic;
+using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using Microsoft.AspNetCore.Builder;
@@ -120,10 +120,12 @@ namespace ProductService.Host
currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer))));
await next();
});
+
if (MsDemoConsts.IsMultiTenancyEnabled)
{
app.UseMultiTenancy();
}
+
app.UseAbpRequestLocalization(); //TODO: localization?
app.UseSwagger();
app.UseSwaggerUI(options =>
diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs
index f9a818234f..504713c047 100644
--- a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs
+++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs
@@ -1,4 +1,4 @@
-using System.Collections.Generic;
+using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using Microsoft.AspNetCore.Builder;
@@ -121,10 +121,12 @@ namespace TenantManagementService.Host
currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer))));
await next();
});
+
if (MsDemoConsts.IsMultiTenancyEnabled)
{
app.UseMultiTenancy();
}
+
app.UseAbpRequestLocalization(); //TODO: localization?
app.UseSwagger();
app.UseSwaggerUI(options =>
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
index 2526aec04d..591b92ae44 100644
--- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
+++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.IO;
using System.Linq;
using Microsoft.AspNetCore.Builder;
@@ -179,12 +179,14 @@ namespace MyCompanyName.MyProjectName
app.UseRouting();
app.UseCors(DefaultCorsPolicyName);
app.UseAuthentication();
+
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
- app.UseAuthorization();
+
app.UseAbpRequestLocalization();
+ app.UseAuthorization();
app.UseSwagger();
app.UseSwaggerUI(options =>
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs
index 7a40f2eef5..0cd3762047 100644
--- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs
+++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.IO;
using System.Linq;
using System.Net.Http;
@@ -169,16 +169,16 @@ namespace MyCompanyName.MyProjectName
app.UseRouting();
app.UseCors(DefaultCorsPolicyName);
app.UseAuthentication();
- app.UseJwtTokenMiddleware();
-
+ app.UseJwtTokenMiddleware();
+
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
+ app.UseAbpRequestLocalization();
app.UseIdentityServer();
app.UseAuthorization();
- app.UseAbpRequestLocalization();
app.UseSwagger();
app.UseSwaggerUI(options =>
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs
index 0a87b21a31..8d23b73d0f 100644
--- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs
+++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.IO;
using System.Linq;
using Localization.Resources.AbpUi;
@@ -135,7 +135,7 @@ namespace MyCompanyName.MyProjectName
});
});
}
-
+
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
@@ -155,13 +155,15 @@ namespace MyCompanyName.MyProjectName
app.UseRouting();
app.UseCors(DefaultCorsPolicyName);
app.UseAuthentication();
+
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
+
+ app.UseAbpRequestLocalization();
app.UseIdentityServer();
app.UseAuthorization();
- app.UseAbpRequestLocalization();
app.UseAuditing();
app.UseAbpSerilogEnrichers();
app.UseConfiguredEndpoints();
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs
index 0809a70cc4..9e1930a260 100644
--- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs
+++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.IO;
using Microsoft.AspNetCore.Authentication.OAuth.Claims;
using Microsoft.AspNetCore.Builder;
@@ -67,7 +67,7 @@ namespace MyCompanyName.MyProjectName.Web
);
});
}
-
+
public override void ConfigureServices(ServiceConfigurationContext context)
{
var hostingEnvironment = context.Services.GetHostingEnvironment();
@@ -232,10 +232,8 @@ namespace MyCompanyName.MyProjectName.Web
app.UseMultiTenancy();
}
- app.UseAuthorization();
-
-
app.UseAbpRequestLocalization();
+ app.UseAuthorization();
app.UseSwagger();
app.UseSwaggerUI(options =>
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs
index 8330951dfc..8015f9ec45 100644
--- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs
+++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.IO;
using Localization.Resources.AbpUi;
using Microsoft.AspNetCore;
@@ -211,9 +211,10 @@ namespace MyCompanyName.MyProjectName.Web
{
app.UseMultiTenancy();
}
+
+ app.UseAbpRequestLocalization();
app.UseIdentityServer();
app.UseAuthorization();
- app.UseAbpRequestLocalization();
app.UseSwagger();
app.UseSwaggerUI(options =>
{
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml
index e3df314288..7329ce019b 100644
--- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml
+++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml
@@ -1,6 +1,10 @@
@page
-@inherits MyCompanyName.MyProjectName.Web.Pages.MyProjectNamePage
+@using Microsoft.AspNetCore.Mvc.Localization
+@using MyCompanyName.MyProjectName.Localization
+@using Volo.Abp.Users
@model MyCompanyName.MyProjectName.Web.Pages.IndexModel
+@inject IHtmlLocalizer L
+@inject ICurrentUser CurrentUser
@section styles {
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectNamePage.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectNamePage.cs
deleted file mode 100644
index 5fe044221d..0000000000
--- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectNamePage.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using Microsoft.AspNetCore.Mvc.Localization;
-using Microsoft.AspNetCore.Mvc.Razor.Internal;
-using MyCompanyName.MyProjectName.Localization;
-using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
-
-namespace MyCompanyName.MyProjectName.Web.Pages
-{
- /* Inherit your UI Pages from this class. To do that, add this line to your Pages (.cshtml files under the Page folder):
- * @inherits MyCompanyName.MyProjectName.Web.Pages.MyProjectNamePage
- */
- public abstract class MyProjectNamePage : AbpPage
- {
- [RazorInject]
- public IHtmlLocalizer L { get; set; }
- }
-}
diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestModule.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestModule.cs
index 20f7e793c2..28b5e3b55b 100644
--- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestModule.cs
+++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestModule.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Globalization;
using Localization.Resources.AbpUi;
@@ -88,11 +88,11 @@ namespace MyCompanyName.MyProjectName
});
app.UseVirtualFiles();
- app.UseRouting();
+ app.UseRouting();
app.UseAuthentication();
+ app.UseAbpRequestLocalization();
app.UseAuthorization();
- app.UseAbpRequestLocalization();
app.Use(async (ctx, next) =>
{
@@ -110,4 +110,4 @@ namespace MyCompanyName.MyProjectName
app.UseConfiguredEndpoints();
}
}
-}
\ No newline at end of file
+}
diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
index e425512797..fa3ad928f4 100644
--- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
+++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
@@ -1,6 +1,8 @@
-using System;
+using System;
+using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Security.Claims;
using IdentityModel;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Cors;
@@ -164,14 +166,29 @@ namespace MyCompanyName.MyProjectName
app.UseCorrelationId();
app.UseVirtualFiles();
app.UseRouting();
- app.UseCors(DefaultCorsPolicyName);
+ app.UseCors(DefaultCorsPolicyName);
app.UseAuthentication();
+
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
- app.UseAuthorization();
+ app.Use(async (ctx, next) =>
+ {
+ var currentPrincipalAccessor = ctx.RequestServices.GetRequiredService();
+ var map = new Dictionary()
+ {
+ { "sub", AbpClaimTypes.UserId },
+ { "role", AbpClaimTypes.Role },
+ { "email", AbpClaimTypes.Email },
+ //any other map
+ };
+ var mapClaims = currentPrincipalAccessor.Principal.Claims.Where(p => map.Keys.Contains(p.Type)).ToList();
+ currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer))));
+ await next();
+ });
app.UseAbpRequestLocalization();
+ app.UseAuthorization();
app.UseSwagger();
app.UseSwaggerUI(options =>
{
diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs
index 9d0cb8397c..41d31efc53 100644
--- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs
+++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Linq;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Cors;
@@ -185,16 +185,18 @@ namespace MyCompanyName.MyProjectName
app.UseCorrelationId();
app.UseVirtualFiles();
app.UseRouting();
- app.UseCors(DefaultCorsPolicyName);
+ app.UseCors(DefaultCorsPolicyName);
app.UseAuthentication();
app.UseJwtTokenMiddleware();
+
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
+
+ app.UseAbpRequestLocalization();
app.UseIdentityServer();
app.UseAuthorization();
- app.UseAbpRequestLocalization();
app.UseSwagger();
app.UseSwaggerUI(options =>
{
diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs
index 385b840e75..7381787bc3 100644
--- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs
+++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs
@@ -73,7 +73,7 @@ namespace MyCompanyName.MyProjectName
);
});
}
-
+
public override void ConfigureServices(ServiceConfigurationContext context)
{
var hostingEnvironment = context.Services.GetHostingEnvironment();
@@ -234,16 +234,15 @@ namespace MyCompanyName.MyProjectName
app.UseHttpsRedirection();
app.UseVirtualFiles();
app.UseRouting();
- app.UseAuthentication();
+ app.UseAuthentication();
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
- app.UseAuthorization();
-
app.UseAbpRequestLocalization();
+ app.UseAuthorization();
app.UseSwagger();
app.UseSwaggerUI(options =>
diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs
index 48b0667350..246db32e3e 100644
--- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs
+++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs
@@ -128,19 +128,21 @@ namespace MyCompanyName.MyProjectName
app.UseVirtualFiles();
app.UseRouting();
app.UseAuthentication();
- app.UseAuthorization();
+
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
+ app.UseAbpRequestLocalization();
+ app.UseAuthorization();
+
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API");
});
- app.UseAbpRequestLocalization();
app.UseAuditing();
app.UseAbpSerilogEnrichers();
app.UseConfiguredEndpoints();