Browse Source

Added experimental try-catch logic.

pull/8074/head
Halil İbrahim Kalkan 6 years ago
parent
commit
0f5115117d
  1. 7
      framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/ExceptionHandling/IUserExceptionInformer.cs
  2. 20
      framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/ExceptionHandling/UserExceptionInformer.cs
  3. 16
      framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs
  4. 11
      framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/ExceptionHandling/IUserExceptionInformer.cs
  5. 18
      framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/ExceptionHandling/NullUserExceptionInformer.cs
  6. 2
      framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/ExceptionHandling/UserExceptionInformerContext.cs
  7. 17
      modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs

7
framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/ExceptionHandling/IUserExceptionInformer.cs

@ -1,7 +0,0 @@
namespace Volo.Abp.AspNetCore.Components.Web.ExceptionHandling
{
public interface IUserExceptionInformer
{
void Inform(UserExceptionInformerContext context);
}
}

20
framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/ExceptionHandling/UserExceptionInformer.cs

@ -1,6 +1,8 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.AspNetCore.Components.ExceptionHandling;
using Volo.Abp.AspNetCore.Components.Messages;
using Volo.Abp.AspNetCore.ExceptionHandling;
using Volo.Abp.DependencyInjection;
@ -8,6 +10,7 @@ using Volo.Abp.Http;
namespace Volo.Abp.AspNetCore.Components.Web.ExceptionHandling
{
[Dependency(ReplaceServices = true)]
public class UserExceptionInformer : IUserExceptionInformer, ITransientDependency
{
public ILogger<UserExceptionInformer> Logger { get; set; }
@ -25,11 +28,12 @@ namespace Volo.Abp.AspNetCore.Components.Web.ExceptionHandling
public void Inform(UserExceptionInformerContext context)
{
//TODO: Create sync versions of the MessageService APIs.
var errorInfo = GetErrorInfo(context);
if (errorInfo.Details.IsNullOrEmpty())
{
//TODO: Should we introduce MessageService.Error (sync) method instead of such a usage (without await)..?
MessageService.Error(errorInfo.Message);
}
else
@ -38,6 +42,20 @@ namespace Volo.Abp.AspNetCore.Components.Web.ExceptionHandling
}
}
public async Task InformAsync(UserExceptionInformerContext context)
{
var errorInfo = GetErrorInfo(context);
if (errorInfo.Details.IsNullOrEmpty())
{
await MessageService.Error(errorInfo.Message);
}
else
{
await MessageService.Error(errorInfo.Details, errorInfo.Message);
}
}
protected virtual RemoteServiceErrorInfo GetErrorInfo(UserExceptionInformerContext context)
{
// if (context.Exception is AbpRemoteCallException remoteCallException)

16
framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs

@ -1,4 +1,5 @@
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.DependencyInjection;
@ -6,6 +7,7 @@ using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.AspNetCore.Components.Alerts;
using Volo.Abp.AspNetCore.Components.ExceptionHandling;
using Volo.Abp.AspNetCore.Components.Messages;
using Volo.Abp.AspNetCore.Components.Notifications;
using Volo.Abp.Localization;
@ -55,12 +57,15 @@ namespace Volo.Abp.AspNetCore.Components
protected ICurrentUser CurrentUser => LazyGetRequiredService(ref _currentUser);
private ICurrentUser _currentUser;
protected IUiMessageService Message => LazyGetNonScopedRequiredService(ref _message);
private IUiMessageService _message;
protected IUiNotificationService Notify => LazyGetNonScopedRequiredService(ref _notify);
private IUiNotificationService _notify;
protected IUserExceptionInformer UserExceptionInformer => LazyGetRequiredService(ref _userExceptionInformer);
private IUserExceptionInformer _userExceptionInformer;
protected IAlertManager AlertManager => LazyGetNonScopedRequiredService(ref _alertManager);
private IAlertManager _alertManager;
@ -134,5 +139,14 @@ namespace Volo.Abp.AspNetCore.Components
return localizer;
}
protected async Task ShowError(Exception exception)
{
await InvokeAsync(async () =>
{
await UserExceptionInformer.InformAsync(new UserExceptionInformerContext(exception));
StateHasChanged();
});
}
}
}

11
framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/ExceptionHandling/IUserExceptionInformer.cs

@ -0,0 +1,11 @@
using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Components.ExceptionHandling
{
public interface IUserExceptionInformer
{
void Inform(UserExceptionInformerContext context);
Task InformAsync(UserExceptionInformerContext context);
}
}

18
framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/ExceptionHandling/NullUserExceptionInformer.cs

@ -0,0 +1,18 @@
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Components.ExceptionHandling
{
public class NullUserExceptionInformer : IUserExceptionInformer, ISingletonDependency
{
public void Inform(UserExceptionInformerContext context)
{
}
public Task InformAsync(UserExceptionInformerContext context)
{
return Task.CompletedTask;
}
}
}

2
framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/ExceptionHandling/UserExceptionInformerContext.cs → framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/ExceptionHandling/UserExceptionInformerContext.cs

@ -1,7 +1,7 @@
using System;
using JetBrains.Annotations;
namespace Volo.Abp.AspNetCore.Components.Web.ExceptionHandling
namespace Volo.Abp.AspNetCore.Components.ExceptionHandling
{
public class UserExceptionInformerContext
{

17
modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs

@ -35,6 +35,23 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity
HasManagePermissionsPermission = await AuthorizationService.IsGrantedAsync(IdentityPermissions.Roles.ManagePermissions);
}
protected override async Task DeleteEntityAsync(IdentityRoleDto entity)
{
//TODO: I will move try/catch to base class, doing here for test purpose
try
{
await CheckDeletePolicyAsync();
await AppService.DeleteAsync(entity.Id);
await GetEntitiesAsync();
}
catch (Exception ex)
{
await ShowError(ex);
//await Message.Error("Error: " + ex.Message); //This works if I uncomment
}
}
protected override string GetDeleteConfirmationMessage(IdentityRoleDto entity)
{
return string.Format(L["RoleDeletionConfirmationMessage"], entity.Name);

Loading…
Cancel
Save