Browse Source

Blazor exception handling refactor & test code.

pull/5791/head
Halil İbrahim Kalkan 6 years ago
parent
commit
975a0cfcad
  1. 2
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/AbpExceptionHandlingLogger.cs
  2. 7
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/IUserExceptionInformer.cs
  3. 34
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/UserExceptionInformer.cs
  4. 5
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/SimpleUiMessageService.cs
  5. 5
      framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiMessageService.cs
  6. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor
  7. 10
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.cs

2
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/AbpExceptionHandlingLogger.cs

@ -39,7 +39,7 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.ExceptionHandling
return; return;
} }
_userExceptionInformer.InformAsync(new UserExceptionInformerContext(exception)); _userExceptionInformer.Inform(new UserExceptionInformerContext(exception));
} }
protected virtual void TryInitialize() protected virtual void TryInitialize()

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

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

34
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/UserExceptionInformer.cs

@ -1,5 +1,7 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.AspNetCore.ExceptionHandling; using Volo.Abp.AspNetCore.ExceptionHandling;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Http; using Volo.Abp.Http;
@ -9,19 +11,33 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.ExceptionHandling
{ {
public class UserExceptionInformer : IUserExceptionInformer, ITransientDependency public class UserExceptionInformer : IUserExceptionInformer, ITransientDependency
{ {
public ILogger<UserExceptionInformer> Logger { get; set; }
protected IUiMessageService MessageService { get; } protected IUiMessageService MessageService { get; }
protected IExceptionToErrorInfoConverter ExceptionToErrorInfoConverter { get; } protected IExceptionToErrorInfoConverter ExceptionToErrorInfoConverter { get; }
public UserExceptionInformer(IUiMessageService messageService, IExceptionToErrorInfoConverter exceptionToErrorInfoConverter) public UserExceptionInformer(
IUiMessageService messageService,
IExceptionToErrorInfoConverter exceptionToErrorInfoConverter)
{ {
MessageService = messageService; MessageService = messageService;
ExceptionToErrorInfoConverter = exceptionToErrorInfoConverter; ExceptionToErrorInfoConverter = exceptionToErrorInfoConverter;
Logger = NullLogger<UserExceptionInformer>.Instance;
} }
public virtual async Task InformAsync(UserExceptionInformerContext context) public void Inform(UserExceptionInformerContext context)
{ {
var errorInfo = GetErrorInfo(context); var errorInfo = GetErrorInfo(context);
await ShowErrorInfoAsync(errorInfo);
if (errorInfo.Details.IsNullOrEmpty())
{
Logger.LogInformation(errorInfo.Message + " - " + errorInfo.Details);
MessageService.ErrorAsync(errorInfo.Message);
}
else
{
Logger.LogInformation(errorInfo.Message);
MessageService.ErrorAsync(errorInfo.Details, errorInfo.Message);
}
} }
protected virtual RemoteServiceErrorInfo GetErrorInfo(UserExceptionInformerContext context) protected virtual RemoteServiceErrorInfo GetErrorInfo(UserExceptionInformerContext context)
@ -33,17 +49,5 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.ExceptionHandling
return ExceptionToErrorInfoConverter.Convert(context.Exception, false); return ExceptionToErrorInfoConverter.Convert(context.Exception, false);
} }
protected virtual async Task ShowErrorInfoAsync(RemoteServiceErrorInfo errorInfo)
{
if (errorInfo.Details.IsNullOrEmpty())
{
await MessageService.ErrorAsync(errorInfo.Message);
}
else
{
await MessageService.ErrorAsync(errorInfo.Details, errorInfo.Message);
}
}
} }
} }

5
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageService.cs → framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/SimpleUiMessageService.cs

@ -5,12 +5,11 @@ using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Components.WebAssembly namespace Volo.Abp.AspNetCore.Components.WebAssembly
{ {
//TODO: Implement with sweetalert in a new package public class SimpleUiMessageService : IUiMessageService, ITransientDependency
public class UiMessageService : IUiMessageService, ITransientDependency
{ {
protected IJSRuntime JsRuntime { get; } protected IJSRuntime JsRuntime { get; }
public UiMessageService(IJSRuntime jsRuntime) public SimpleUiMessageService(IJSRuntime jsRuntime)
{ {
JsRuntime = jsRuntime; JsRuntime = jsRuntime;
} }

5
framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiMessageService.cs

@ -64,6 +64,11 @@ namespace Volo.Abp.BlazoriseUI
var uiMessageOptions = CreateDefaultOptions(); var uiMessageOptions = CreateDefaultOptions();
options?.Invoke(uiMessageOptions); options?.Invoke(uiMessageOptions);
if (MessageReceived == null)
{
Logger.LogWarning("MessageReceived was NULL...!!!!!!!!!!!! " + message);
}
MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Error, message, title, uiMessageOptions)); MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Error, message, title, uiMessageOptions));
return Task.CompletedTask; return Task.CompletedTask;

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor

@ -23,6 +23,8 @@
<i class="fa fa-sign-in-alt"></i> @L["Login"] <i class="fa fa-sign-in-alt"></i> @L["Login"]
</a> </a>
} }
<Button Color="Color.Danger" Clicked="ThrowException">TEST EXCEPTION</Button>
</div> </div>
<div class="my-3 text-center"> <div class="my-3 text-center">

10
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.cs

@ -1,7 +1,13 @@
namespace MyCompanyName.MyProjectName.Blazor.Pages using System;
using Volo.Abp;
namespace MyCompanyName.MyProjectName.Blazor.Pages
{ {
public partial class Index public partial class Index
{ {
private void ThrowException()
{
throw new UserFriendlyException("Hey, there was a problem :(");
}
} }
} }

Loading…
Cancel
Save