Wpis z mikrobloga

Hej Mirki. Pracuję nad web appem, gdzie FE jest w angularze i mam problem z ustaleniem odpowiedniej konwencji dla obsługi powrotnych statusów z kodami błędów.
Mam na myśli, nie zwracanie prostego BadRequestu ale opakowanie kodów błędów w jakiś model, który mógłby być prosto interpretowany w Angularze.

Więc mam ustalony cel i uważam, że to dobry pomysł ale kompletnie nie mam pomysłu jak to zrealizować. Tzn. za każdym razem zatrzymuje się w momencie gdy dowolnyService zwraca np. Failed z komunikatem błędu do kontrolera (lub komunikatami!) i no właśnie tu po pierwsze błąd może wynikać z błędnej autoryzacji, błędnej walidacji czegoś tam głęboko w Service i generalnie co, mam to znowu sobie rozdzielać w kontrolerze na inne błędy? I nawet to bym przeżył ale znowu należy poprawnie ponazywać i potworzyć modele iiiii no sam nie wiem.

Znacie jakiś fajny artykuł na ten temat?

#aspnet #dotnet #aspnetcore #csharp
  • 6
@w_o_w: @trustME: Rzucać wyjątki w aplikacji i łapać przez ExceptionFilter

Flow powinien być taki mniej więcej:
1. Zalogować błąd do pliku/bazy danych/ whatever.
2. Ustawić status response'a na 500
3. Jeśli błąd jest spodziewany (np. dziedziczy po ApplicationException), to go zmapować na APIError
Jeśli jest niespodziewany, to na środowisku deweloperskim rzucić, a produkcyjnie wstawić jakąś wyświechtaną formułkę "Przepraszamy, błąd serwera" i zmapować na APIError
4. Dołączyć APIError do response'a.

A
@w_o_w: najlepiej chyba dorzucic do pipeline jakis ErrorHandlerMiddleware ktory bedzie lapal wyjatki rzucane przez serwisy, repozytoria lub obiekty domenowe. Niech te obiekty rzucaja wyjatki w sensowny sposob - np. te dotyczace autoryzacji niech beda UnauthorizedAccessException, te z serwisow ServiceException (wlasna klasa dziedziczaca po Exception itp.
Middleware niech na podstawie tego co zlapal (pattern matching) ustawia odpowiedni http status code odpowiedzi i w payload zwraca jakies dodatkowe info w stylu kod bledu
@w_o_w: z kolei na froncie daj inny middleware do serwisu obslugjacego zapytania http / fetch. Znane mi frameworki (vue i aurelia ale zakladam ze i kazdy inny sensowny) daja mozliwosc ustawienia interceptorow na wszystkie żądania wychodzace / odpowiedzi wracajace. Mozna wiec w pipeline wstrzyknac prosta kontrole ktora sprawdza jaki kod wrocil z backendu i jezeli jest to cos innego niz 2XX to robi reject na promisie oraz wyswietla np. modala z