From 595a10b7fcf7881c8fc7a03f8e8fd812b6aa1100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 7 Dec 2020 19:27:48 +0300 Subject: [PATCH] Blazor UI: Error Handling documented. --- docs/en/UI/Blazor/Error-Handling.md | 61 +++++++++++++++++- .../blazor-generic-exception-message.png | Bin 0 -> 19457 bytes .../images/blazor-user-friendly-exception.png | Bin 0 -> 17445 bytes 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 docs/en/images/blazor-generic-exception-message.png create mode 100644 docs/en/images/blazor-user-friendly-exception.png diff --git a/docs/en/UI/Blazor/Error-Handling.md b/docs/en/UI/Blazor/Error-Handling.md index 0568d5d76c..f43456e3a7 100644 --- a/docs/en/UI/Blazor/Error-Handling.md +++ b/docs/en/UI/Blazor/Error-Handling.md @@ -1,3 +1,62 @@ # Blazor UI: Error Handling -TODO \ No newline at end of file +Blazor, by default, shows a yellow line at the bottom of the page if any unhandled exception occurs. However, this is not useful in a real application. + +ABP provides an automatic error handling system for the Blazor UI. + +* Handles all unhandled exceptions and shows nice and useful messages to the user. +* It distinguishes different kind of exceptions. Hides internal/technical error details from the user (shows a generic error message in these cases). +* It is well integrated to the [server side exception handling](../../Exception-Handling.md) system. + +## Basic Usage + +There are different type of `Exception` classes handled differently by the ABP Framework. + +### UserFriendlyException + +`UserFriendlyException` is a special type of exception. You can directly show a error message dialog to the user by throwing such an exception. + +**Example** + +````csharp +@page "/" +@using Volo.Abp + + + +@code +{ + private void TestException() + { + throw new UserFriendlyException("A user friendly error message!"); + } +} +```` + +ABP automatically handle the exception and show an error message to the user: + +![blazor-user-friendly-exception](../../images/blazor-user-friendly-exception.png) + +> You can derive from `UserFriendlyException` or directly implement `IUserFriendlyException` interface to create your own `Exception` class if you need. + +> You can use the [localization system](Localization.md) to show localized error messages. + +### BusinessException and Other Exception Types + +See the [exception handling document](../../Exception-Handling.md) to understand different kind of Exception class and interfaces and other capabilities of the Exception Handling system. + +## Generic Errors + +If the thrown `Exception` is not a special type, it is considered as generic error and a generic error message is shown to the user: + +![blazor-generic-exception-message](../../images/blazor-generic-exception-message.png) + +> All error details (including stack trace) are still written in the browser's console. + +## Server Side Errors + +Errors (like Validation, Authorization and User Friendly Errors) sent by the server are processed as you expect and properly shown to the user. So, error handling system works end to end without need to manually handle exceptions or manually transfer server-to-client error messages. + +## See Also + +* [Exception Handling System](../../Exception-Handling.md) \ No newline at end of file diff --git a/docs/en/images/blazor-generic-exception-message.png b/docs/en/images/blazor-generic-exception-message.png new file mode 100644 index 0000000000000000000000000000000000000000..5e128003cf70fa6f2108891adaa4bc835f677f8a GIT binary patch literal 19457 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 KE$>hB!2bu?`1SDs literal 0 HcmV?d00001 diff --git a/docs/en/images/blazor-user-friendly-exception.png b/docs/en/images/blazor-user-friendly-exception.png new file mode 100644 index 0000000000000000000000000000000000000000..fa2a70d931858a62449233e4b1d0195c94924ad5 GIT binary patch literal 17445 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 K?|k+9PyZVzo`zTe literal 0 HcmV?d00001