Jak zmienić adres w przeglądarce (pokazanie komunikatu o błędzie) - .netcore webapp

0

Hej, mam taką sytuację i zastanawiam się, czy dobrze jest to robione.
Wszystko jest pisane w .NetCore.

Jest sobie WebAPI, do którego podłączają się różni klienci - WebApplication, Wpf, mobilne itd.

I teraz tak. Jest WebApplication, które w pewnym momencie musi coś wykonać, np:
(to fragment kontrolera)

public async Task<IActionResult> DeleteDocument(Guid id)
{
    Document doc = new Document();
    doc.Id = id;
    bool result = await docContr.DeleteDocument(doc);
    if (!result)
        this.ShowDialogIfExists(dialogs);
    return await ShowDocumentLisrForLoggedUser();
}

Tutaj operacja faktycznego usunięcia dokumentu jest oddelegowana do WebApi. Obiekt docContr robi tyle, że wywołuje metodę z API, a potem sprawdza odpowiedź. I w klientach desktopowych/mobilnych działa to tak, że jeśli jest błąd, to pokazywany jest komunikat błędu.

Oczywiście w WebApplication musi to być inaczej zrobione (stąd obiekt docContr przyjmuje interfejs IDialogs, który ma różne implementacje).
Rozszerzenie ShowDialogIfExists robi tylko tyle, że sprawdza, czy jest jakiś komunikat do pokazania, a potem po prostu dodaje odpowiednie ViewData. np:

DialogInfo di = new DialogInfo(DialogTypes.Alert, "Hej, masz błąd", "Nie możesz tego zrobić, bo blablabla");
ViewData["DialogInfo"] = di;

Następnie główny widok sprawdza, czy ma coś takiego jak np. ViewData["DialogInfo"] i jeśli tak, to pokazuje komunikat błędu.
I to wszystko działa poprawnie... Ale...

Załóżmy, że użytkownik wchodzi na listę dokumentów. W przeglądarce jest adres: https://localhost/Documents
Następnie użytkownik chce usunąć jakiś dokument - wywołuje się powyższa akcja z kontrolera, która jest pod adresem: https://localhost/Documents/DeleteDocument/5 (to idzie POSTem)

Po operacji usunięcia dokumentu (niezależnie od tego, czy się udało, czy nie), znowu muszę pokazać listę dokumentów, więc na początku próbowałem tak:

RedirectToAction("Index");

Problem pojawił się w momencie, gdy był błąd. Bo oczywiście po takim redirekcie ViewData było czyszczone. Więc zrobiłem to z użyciem metody pomocniczej: ShowDocumentLisrForLoggedUser, która po prostu pobiera listę dokumentów i zwraca widok: return View("Index")
I to działa super.
Problem jest tylko taki, że w przeglądarce pozostaje adres: https://localhost/Documents/DeleteDocument/5, a ja bym chciał, żeby użytkownik zobaczył: https://localhost/Documents

Jak to osiągnąć? I czy w ogóle to, co robię, robię dobrze? Czy może .NetCore ma jakiś predefiniowany mechanizm do pokazywania błędów z kontrolerów?

6

A **TempData **zamiast **ViewData **się do tego nie nada? z tego co czytam jest utrzymywane od jednego żądania do drugiego

1 użytkowników online, w tym zalogowanych: 0, gości: 1