Skip to content

Commit ac92ba7

Browse files
Update README.md
1 parent 7e7e1b2 commit ac92ba7

1 file changed

Lines changed: 56 additions & 0 deletions

File tree

README.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,62 @@ public class CustomCieEvents : CieEvents
161161
}
162162
```
163163

164+
# Error Handling
165+
La libreria può, in qualunque fase (sia in fase di creazione della Request sia in fase di gestione della Response), sollevare eccezioni.
166+
Un tipico scenario è quello in cui vengono ricevuti i codici di errore previsti dal protocollo (n.19, n.20, ecc....), in tal caso la libreria solleva un'eccezione contenente il corrispondente messaggio d'errore localizzato, richiesto dalle specifiche CIE3.0, che è possibile gestire (ad esempio per la visualizzazione) utilizzando il normale flusso previsto per AspNetCore. L'esempio seguente fa uso del middleware di ExceptionHandling di AspNetCore.
167+
168+
```csharp
169+
public void Configure(IApplicationBuilder app, IHostEnvironment env)
170+
{
171+
...
172+
app.UseExceptionHandler("/Home/Error");
173+
...
174+
}
175+
176+
.......
177+
178+
// HomeController
179+
[AllowAnonymous]
180+
public async Task<IActionResult> Error()
181+
{
182+
var exceptionHandlerPathFeature =
183+
HttpContext.Features.Get<IExceptionHandlerPathFeature>();
184+
185+
string errorMessage = string.Empty;
186+
187+
if (exceptionHandlerPathFeature?.Error != null)
188+
{
189+
var messages = FromHierarchy(exceptionHandlerPathFeature?.Error, ex => ex.InnerException)
190+
.Select(ex => ex.Message)
191+
.ToList();
192+
errorMessage = String.Join(" ", messages);
193+
}
194+
195+
return View(new ErrorViewModel
196+
{
197+
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier,
198+
Message = errorMessage
199+
});
200+
}
201+
202+
private IEnumerable<TSource> FromHierarchy<TSource>(TSource source,
203+
Func<TSource, TSource> nextItem,
204+
Func<TSource, bool> canContinue)
205+
{
206+
for (var current = source; canContinue(current); current = nextItem(current))
207+
{
208+
yield return current;
209+
}
210+
}
211+
212+
private IEnumerable<TSource> FromHierarchy<TSource>(TSource source,
213+
Func<TSource, TSource> nextItem)
214+
where TSource : class
215+
{
216+
return FromHierarchy(source, nextItem, s => s != null);
217+
}
218+
```
219+
164220
# Compliance
165221
La libreria è stata oggetto di collaudo da parte dell'Istituto Poligrafico e Zecca dello Stato, ha superato tutti i test di [spid-saml-check](https://github.com/italia/spid-saml-check) ed è compliant con le direttive specificate nel manuale operativo di CIE.
166222

0 commit comments

Comments
 (0)