Używam RC2
Korzystanie z routingu adresów URL:
routes.MapRoute(
"Error",
"{*url}",
new { controller = "Errors", action = "NotFound" } // 404s
);
Powyższe wydaje się zajmować takimi żądaniami (przy założeniu domyślnej konfiguracji tabel tras przez początkowy projekt MVC): „/ bla / bla / bla / bla”
Przesłanianie HandleUnknownAction () w samym kontrolerze:
// 404s - handle here (bad action requested
protected override void HandleUnknownAction(string actionName) {
ViewData["actionName"] = actionName;
View("NotFound").ExecuteResult(this.ControllerContext);
}
Jednak poprzednie strategie nie obsługują żądania do złego / nieznanego kontrolera. Na przykład nie mam „/ IDoNotExist”, jeśli o to poproszę, otrzymam ogólną stronę 404 z serwera WWW, a nie moją 404, jeśli użyję routingu + przesłonięcia.
Wreszcie moje pytanie brzmi: czy jest jakiś sposób na złapanie tego typu żądania przy użyciu trasy lub czegoś innego w samym środowisku MVC?
LUB czy powinienem po prostu domyślnie używać WebConfig customErrors jako mojego modułu obsługi 404 i zapomnieć o tym wszystkim? Zakładam, że jeśli pójdę z customErrors, będę musiał przechowywać ogólną stronę 404 poza / Views ze względu na ograniczenia Web.Config dotyczące bezpośredniego dostępu.
Odpowiedzi:
Kod pochodzi z http://blogs.microsoft.co.il/blogs/shay/archive/2009/03/06/real-world-error-hadnling-in-asp-net-mvc-rc2.aspx i działa również w ASP.net MVC 1.0
Oto jak obsługuję wyjątki http:
źródło
Wymagania dla 404
Oto moje wymagania dotyczące rozwiązania 404, a poniżej pokazuję, jak go wdrożyć:
Rozwiązanie
Myślę, że powinieneś oszczędzać
Application_Error
w Global.asax na wyższe rzeczy, takie jak nieobsługiwane wyjątki i logowanie (jak pokazuje odpowiedź Shaya Jacoby'ego ), ale nie obsługę 404. Właśnie dlatego moja sugestia trzyma 404 rzeczy poza plikiem Global.asax.Krok 1: Wspólne miejsce dla logiki błędu 404
To dobry pomysł na łatwość konserwacji. Użyj narzędzia ErrorController , aby przyszłe ulepszenia dobrze zaprojektowanej strony 404 można było łatwo dostosować. Upewnij się również, że twoja odpowiedź ma kod 404 !
Krok 2: Użyj podstawowej klasy kontrolera, aby łatwo wywołać niestandardową akcję 404 i połączyć się
HandleUnknownAction
404 w ASP.NET MVC trzeba złapać w wielu miejscach. Pierwszy to
HandleUnknownAction
.InvokeHttp404
Metoda tworzy wspólne miejsce do ponownego trasy doErrorController
i naszej nowejHttp404
akcji. Pomyśl o SUCHYM !Krok 3: Użyj wstrzykiwania zależności w fabryce sterowników i podłącz 404 wyjątki HTTP
Podobnie (nie musi to być StructureMap):
Przykład MVC1.0:
Przykład MVC2.0:
Myślę, że lepiej jest wychwytywać błędy bliżej ich źródła. Dlatego wolę powyższe niż przewodnik
Application_Error
.To drugie miejsce na złapanie 404.
Krok 4: Dodaj trasę NotFound do Global.asax dla adresów URL, które nie mogą zostać przeanalizowane w Twojej aplikacji
Ta trasa powinna wskazywać na nasze
Http404
działanie. Zauważ, żeurl
parametr będzie względnym adresem URL, ponieważ silnik routingu usuwa część domeny tutaj? Właśnie dlatego mamy całą tę logikę warunkowego adresu URL w kroku 1.To trzecie i ostatnie miejsce do złapania 404 w aplikacji MVC, której sam nie wywołujesz. Jeśli nie złapiesz niedopasowanych tras tutaj, MVC przekaże problem do ASP.NET (Global.asax) i tak naprawdę nie chcesz tego w tej sytuacji.
Krok 5: W końcu wywołaj 404s, gdy aplikacja nie może czegoś znaleźć
Na przykład, gdy zły identyfikator jest przesyłany do mojego kontrolera pożyczek (pochodzi od
MyController
):Byłoby miło, gdyby wszystko to można było podłączyć w mniejszej liczbie miejsc z mniejszym kodem, ale myślę, że to rozwiązanie jest łatwiejsze w utrzymaniu, bardziej testowalne i dość pragmatyczne.
Dziękujemy za opinie do tej pory. Chciałbym dostać więcej.
UWAGA: Zostało to znacznie zmienione z mojej oryginalnej odpowiedzi, ale cel / wymagania są takie same - dlatego nie dodałem nowej odpowiedzi
źródło
customErrors
Sekcja web.config definiuje statyczne strony przekierowujące, które są obsługiwane na wysokim poziomie w aspnet, jeśli nie IIS. To nie jest to, czego chciałem, ponieważ potrzebowałem, aby wynikiem były Widoki MVC (więc mogę mieć w nich dane itp.). Nie powiedziałbym kategorycznie, że „customErrors
jest przestarzałe w MVC”, ale dla mnie i dla tego rozwiązania 404 na pewno są.ObjectFactory.GetInstance
na MVC3,DependencyResolver.Current.GetService
więc jest bardziej ogólny. Używam Ninject.ASP.NET MVC nie obsługuje zbyt dobrze niestandardowych stron 404. Fabryka kontrolerów niestandardowych, trasa uniwersalna, podstawowa klasa kontrolerów z
HandleUnknownAction
- argh!Niestandardowe strony błędów IIS są jak dotąd lepszą alternatywą:
web.config
ErrorController
Przykładowy projekt
źródło
customErrors mode="On"
się to,HandleErrorAttribute
aby działać. Niestandardowe strony błędów dla nieobsługiwanych wyjątków w działaniach kontrolera nie są już wyświetlane.Szybka odpowiedź / TL; DR
Dla leniwych ludzi:
Następnie usuń ten wiersz z
global.asax
Dotyczy to tylko IIS7 + i IIS Express.
Jeśli używasz Cassini ... cóż ... hmm ... niezręcznie ...
Długa, wyjaśniona odpowiedź
Wiem, że na to odpowiedziano. Ale odpowiedź jest NAPRAWDĘ PROSTA (wiwaty dla Davida Fowlera i Damiana Edwardsa za naprawdę udzielenie odpowiedzi).
Nie trzeba robić nic niestandardowego .
Dla
ASP.NET MVC3
wszystkie bity są tam.Krok 1 -> Zaktualizuj swój plik web.config w DWÓCH miejscach.
i
Teraz zwróć uwagę na TRASY, które zdecydowałem się użyć. Możesz użyć wszystkiego, ale moje trasy są
/NotFound
<- dla 404 nie znaleziono, strona błędu./ServerError
<- w przypadku każdego innego błędu dołącz błędy, które występują w moim kodzie. jest to wewnętrzny błąd serwera 500Zobacz, jak pierwsza sekcja
<system.web>
ma tylko jeden wpis niestandardowy?statusCode="404"
Wpis? Wymieniłem tylko jeden kod stanu, ponieważ wszystkie inne błędy, w tym500 Server Error
(np. Te brzydkie błędy, które występują, gdy kod zawiera błąd i powoduje awarię żądania użytkownika) .. wszystkie pozostałe błędy są obsługiwane przez ustawieniedefaultRedirect="/ServerError"
.. które mówi , jeśli nie znaleziono strony 404, proszę przejść do trasy/ServerError
.Ok. to jest na uboczu .. teraz do moich tras wymienionych w
global.asax
Krok 2 - Tworzenie tras w Global.asax
Oto mój pełny odcinek trasy ..
To pokazuje dwie trasy ignorowania ->
axd's
ifavicons
(ooo! Bonus ignoruj trasę, dla ciebie!) Następnie (i kolejność jest IMPERATIVE TUTAJ), mam dwie wyraźne trasy obsługi błędów .. a następnie wszelkie inne trasy. W takim przypadku domyślny. Oczywiście mam ich więcej, ale jest to coś specjalnego na mojej stronie. Upewnij się tylko, że trasy błędów znajdują się na górze listy. Porządek jest konieczny .Wreszcie, gdy jesteśmy w naszym
global.asax
pliku, NIE rejestrujemy globalnie atrybutu HandleError. Nie, nie, nie proszę pana. Nadda Nie. Nien. Negatywny. Nieeeeeeee ...Usuń tę linię z
global.asax
Krok 3 - Utwórz kontroler za pomocą metod działania
Teraz .. dodajemy kontroler z dwiema metodami działania ...
Ok, sprawdźmy to. Przede wszystkim, nie ma NO
[HandleError]
atrybut tutaj. Dlaczego? Ponieważ wbudowanyASP.NET
platforma już obsługuje błędy ORAZ określiliśmy wszystkie gówna, które musimy zrobić, aby obsłużyć błąd :) Jest w tej metodzie!Następnie mam dwie metody działania. Nic trudnego. Jeśli chcesz wyświetlić informacje o wyjątku, możesz użyć
Server.GetLastError()
tej informacji.Dodatkowy WTF: Tak, podjąłem trzecią metodę działania, aby przetestować obsługę błędów.
Krok 4 - Utwórz widoki
Na koniec utwórz dwa widoki. Umieść je w normalnym miejscu widoku dla tego kontrolera.
Komentarze do bonusów
Application_Error(object sender, EventArgs e)
I to, moi przyjaciele, powinno być to.
Gratulacje za przeczytanie tak dużo i zdobycie Jednorożca jako nagrody!
źródło
?aspxerrorpath=/er/not/found
mieć w adresach URL.Sprawdziłem DUŻO, jak prawidłowo zarządzać 404 w MVC (a konkretnie MVC3) , i to, IMHO jest najlepszym rozwiązaniem, jakie wymyśliłem:
W global.asax:
ErrorsController:
(Opcjonalny)
Wyjaśnienie:
AFAIK, istnieje 6 różnych przypadków, w których aplikacje ASP.NET MVC3 mogą generować 404.
(Automatycznie generowane przez ASP.NET Framework :)
(1) Adres URL nie znajduje dopasowania w tabeli tras.
(Automatycznie generowane przez ASP.NET MVC Framework :)
(2) Adres URL znajduje dopasowanie w tabeli tras, ale określa nieistniejący kontroler.
(3) Adres URL znajduje dopasowanie w tabeli tras, ale określa nieistniejące działanie.
(Generowane ręcznie :)
(4) Akcja zwraca HttpNotFoundResult przy użyciu metody HttpNotFound ().
(5) Akcja zgłasza wyjątek HttpException o kodzie stanu 404.
(6) Działania ręcznie modyfikują właściwość Response.StatusCode na 404.
Zwykle chcesz osiągnąć 3 cele:
(1) Pokaż użytkownikowi niestandardową stronę błędu 404.
(2) Zachowaj kod statusu 404 w odpowiedzi klienta (szczególnie ważne dla SEO).
(3) Wyślij odpowiedź bezpośrednio, bez udziału przekierowania 302.
Istnieją różne sposoby osiągnięcia tego celu:
(1)
Problemy z tym rozwiązaniem:
(2)
Problemy z tym rozwiązaniem:
(3)
Problemy z tym rozwiązaniem:
(4)
i
Problemy z tym rozwiązaniem:
Ludzie, którzy mieli z tym problem, nawet próbowali stworzyć własne biblioteki (patrz http://aboutcode.net/2011/02/26/handling-not-found-with-asp-net-mvc3.html ). Ale poprzednie rozwiązanie wydaje się obejmować wszystkie przypadki bez złożoności korzystania z zewnętrznej biblioteki.
źródło
public ActionResult NotFound() {}
w swoim ErrorsController. Czy możesz również wyjaśnić, jak wyglądałaby Twoja_NotFound
częściowa dla żądań AJAX?MissingMethodException: Cannot create an abstract class
na linięc.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
Jakieś pomysły?Naprawdę podoba mi się rozwiązanie Cottsaks i myślę, że jest bardzo jasno wyjaśnione. moim jedynym dodatkiem była zmiana kroku 2 w następujący sposób
Zasadniczo powstrzymuje to adresy URL zawierające nieprawidłowe działania ORAZ kontrolery przed dwukrotnym uruchomieniem procedury wyjątku. np. dla adresów URL takich jak asdfsdf / dfgdfgd
źródło
Jedynym sposobem, w jaki mogłem zmusić metodę @ cottsak do pracy z nieprawidłowymi kontrolerami, było zmodyfikowanie istniejącego żądania trasy w CustomControllerFactory, tak jak to:
Powinienem wspomnieć, że używam MVC 2.0.
źródło
Oto kolejna metoda wykorzystująca narzędzia MVC, które mogą obsługiwać żądania dotyczące złych nazw kontrolerów, złych nazw tras i wszelkich innych kryteriów, które uważasz za odpowiednie w metodzie akcji. Osobiście wolę unikać jak największej liczby ustawień web.config, ponieważ powodują one przekierowanie 302/200 i nie obsługują ResponseRewrite (
Server.Transfer
) przy użyciu widoków Razor. Wolę zwrócić 404 z niestandardową stroną błędu z powodów SEO.Niektóre z nich to nowe spojrzenie na powyższą technikę Cottsaka.
To rozwiązanie wykorzystuje także minimalne ustawienia web.config faworyzujące filtry błędów MVC 3.
Stosowanie
Wystarczy rzucić HttpException z akcji lub niestandardowego ActionFilterAttribute.
Krok 1
Dodaj następujące ustawienie do pliku web.config. Jest to wymagane, aby użyć HandleErrorAttribute MVC.
Krok 2
Dodaj niestandardowy HandleHttpErrorAttribute podobny do HandleErrorAttribute środowiska MVC, z wyjątkiem błędów HTTP:
Krok 3
Dodaj filtry do GlobalFilterCollection (
GlobalFilters.Filters
) wGlobal.asax
. Ten przykład przekieruje wszystkie błędy InternalServerError (500) do widoku współdzielonego Błąd (Views/Shared/Error.vbhtml
). Błędy NotFound (404) zostaną również wysłane do ErrorHttp404.vbhtml również w widokach udostępnionych. Dodałem tutaj błąd 401, aby pokazać, jak można go rozszerzyć o dodatkowe kody błędów HTTP. Pamiętaj, że muszą to być wspólne widoki i wszystkie używająSystem.Web.Mvc.HandleErrorInfo
obiektu jako modelu.Krok 4
Utwórz podstawową klasę kontrolera i dziedzicz po niej w swoich kontrolerach. Ten krok pozwala nam obsłużyć nieznane nazwy akcji i podnieść błąd HTTP 404 do naszego HandleHttpErrorAttribute.
Krok 5
Utwórz przesłonięcie ControllerFactory i zastąp go w pliku Global.asax w Application_Start. Ten krok pozwala nam zgłosić wyjątek HTTP 404, gdy określono niepoprawną nazwę kontrolera.
Krok 6
Uwzględnij specjalną trasę w swoim RoutTable.Routes dla działania BaseController Nieznany. Pomoże nam to podnieść 404 w przypadku, gdy użytkownik uzyska dostęp do nieznanego kontrolera lub nieznanej akcji.
Podsumowanie
W tym przykładzie pokazano, jak można użyć frameworka MVC do zwrócenia 404 kodów błędów HTTP do przeglądarki bez przekierowania przy użyciu atrybutów filtru i wspólnych widoków błędów. Pokazuje także tę samą niestandardową stronę błędu, gdy określono nieprawidłowe nazwy kontrolera i nazwy akcji.
Dodam zrzut ekranu z nieprawidłową nazwą kontrolera, nazwą akcji i niestandardowym 404 podniesionym z akcji Home / TriggerNotFound, jeśli otrzymam wystarczającą liczbę głosów, aby opublikować jedną =). Fiddler zwraca komunikat 404, gdy uzyskuję dostęp do następujących adresów URL za pomocą tego rozwiązania:
powyższy post Cottsaka i artykuły te stanowiły dobre referencje.
źródło
The IControllerFactory 'aaa.bbb.CustomControllerFactory' did not return a controller for the name '123'.
- jakieś pomysły, dlaczego to dostałem?Moje skrócone rozwiązanie, które działa z nieobsługiwanymi obszarami, kontrolerami i akcjami:
Utwórz widok 404.cshtml.
Utwórz klasę bazową dla swoich kontrolerów:
Utwórz niestandardową fabrykę kontrolera zwracającą kontroler podstawowy jako rezerwowy:
Dodaj do
Application_Start()
następującego wiersza:źródło
W MVC4 WebAPI 404 można obsługiwać w następujący sposób:
KURSY APICONTROLLER
KONTROLER DOMOWY
WIDOK
ŚWIATOWY
WYNIKI
źródło
Wypróbuj NotFoundMVC na nugecie. Działa, bez konfiguracji.
źródło
http://localhost/Views/Shared/NotFound.cshtml
nie powoduje utworzenia niestandardowej strony 404.Moje rozwiązanie, na wypadek, gdyby ktoś uzna to za przydatne.
W Web.config:
W
Controllers/ErrorController.cs
:Dodaj a
PageNotFound.cshtml
doShared
folderu i to wszystko.źródło
model.RequestedUrl = Request.Url.OriginalString.Contains(url) & Request.Url.OriginalString != url ? Request.Url.OriginalString : url;
a niemodel.RequestedUrl = Request.Url.OriginalString.Contains(url) && Request.Url.OriginalString != url ? Request.Url.OriginalString : url;
(i zamiast &&)?Wydaje mi się, że standardowa
CustomErrors
konfiguracja powinna jednak po prostu działać , ponieważ poleganie naServer.Transfer
niej wydaje się, że wewnętrzna implementacjaResponseRewrite
nie jest kompatybilna z MVC.Wydaje mi się to rażącą dziurą w funkcjonalności, dlatego postanowiłem zaimplementować tę funkcję za pomocą modułu HTTP. Poniższe rozwiązanie umożliwia obsługę dowolnego kodu stanu HTTP (w tym 404) poprzez przekierowanie na dowolną prawidłową trasę MVC, tak jak normalnie.
Zostało to przetestowane na następujących platformach;
Korzyści
Rozwiązanie
Stosowanie
Uwzględnij to jako końcowy moduł HTTP w pliku web.config
Dla tych, którzy zwracają uwagę, zauważysz, że w trybie zintegrowanego potoku zawsze będzie to odpowiadać HTTP 200 ze względu na sposób
Server.TransferRequest
działania. Aby zwrócić prawidłowy kod błędu, używam następującego kontrolera błędów.źródło
Radzenie sobie z błędami w ASP.NET MVC to tylko problem w tyłku. Wypróbowałem wiele sugestii na tej stronie oraz na innych pytaniach i stronach i nic nie działa dobrze. Jedna z sugestii dotyczyła obsługi błędów w pliku web.config w systemie system.webserver, ale to po prostu zwraca puste strony .
Moim celem przy opracowywaniu tego rozwiązania było:
Oto moje rozwiązanie.
1. Dodaj następujące elementy do sekcji system.web
Powyższe obsługuje wszystkie adresy URL, które nie są obsługiwane przez route.config i nieobsługiwane wyjątki, szczególnie te napotkane w widokach. Zauważ, że użyłem aspx a nie HTML . Dzięki temu mogę dodać kod odpowiedzi do kodu znajdującego się za nim.
2 . Utwórz folder o nazwie Błąd (lub cokolwiek wolisz) w katalogu głównym projektu i dodaj dwa formularze internetowe. Poniżej znajduje się moja strona 404;
A na kodzie ustawiłem kod odpowiedzi
Zrób to samo dla strony 500
3. Aby obsłużyć błędy w kontrolerach. Można to zrobić na wiele sposobów. To działało dla mnie. Wszystkie moje kontrolery dziedziczą od kontrolera podstawowego. W kontrolerze podstawowym mam następujące metody
4. Dodaj plik CustomError.cshtml do folderu Udostępnione widoki. Poniżej jest moje;
Teraz w kontrolerze aplikacji możesz zrobić coś takiego;
Teraz ostrzeżenie . Nie obsłuży błędów statycznych plików. Więc jeśli masz trasę, taką jak example.com/widgets, a użytkownik zmieni ją na example.com/widgets.html , otrzyma domyślną stronę błędów IIS, więc będziesz musiał obsługiwać błędy poziomu IIS w inny sposób.
źródło
Publikowanie odpowiedzi, ponieważ mój komentarz był zbyt długi ...
Jest to zarówno komentarz, jak i pytania do postu / odpowiedzi jednorożca:
https://stackoverflow.com/a/7499406/687549
Wolę tę odpowiedź od innych ze względu na jej prostotę i fakt, że najwyraźniej skonsultowano się z niektórymi ludźmi w firmie Microsoft. Mam jednak trzy pytania i jeśli można na nie odpowiedzieć, to nazywam tę odpowiedź świętym Graalem wszystkich odpowiedzi na błędy 404/500 w interwebach dla aplikacji ASP.NET MVC (x).
@ Pure.Krome
Czy możesz zaktualizować swoją odpowiedź pozycjami SEO z komentarzy wskazanych przez GWB (nigdy nie wspomniałem o tym w odpowiedzi) -
<customErrors mode="On" redirectMode="ResponseRewrite">
i<httpErrors errorMode="Custom" existingResponse="Replace">
?Czy możesz zapytać znajomych z zespołu ASP.NET, czy można to zrobić w ten sposób - byłoby miło mieć jakieś potwierdzenie - może to wielka nie-nie, aby zmienić
redirectMode
iexistingResponse
w ten sposób móc ładnie grać z SEO ?!Można dodać kilka wyjaśnień otaczającą wszystkie rzeczy (
customErrors redirectMode="ResponseRewrite"
,customErrors redirectMode="ResponseRedirect"
,httpErrors errorMode="Custom" existingResponse="Replace"
, wyjąćcustomErrors
całkowicie, jak ktoś sugerował) po rozmowie do znajomych na Microsoft?Jak mówiłem; byłoby supernice, gdybyśmy mogli uzupełnić twoją odpowiedź, ponieważ wydaje się to dość popularne pytanie z ponad 54 000 wyświetleń.
Aktualizacja : odpowiedź Unicorn powoduje odnalezienie 302 i 200 OK i nie można jej zmienić tak, aby zwracała tylko 404 przy użyciu trasy. Musi to być plik fizyczny, który nie jest zbyt MVC: ish. Przejdźmy więc do innego rozwiązania. Szkoda, ponieważ wydaje się, że jest to ostateczna MVC: jak dotąd odpowiedź.
źródło
Dodanie mojego rozwiązania, które jest prawie identyczne z rozwiązaniem Hermana Kana, z niewielką zmarszczką, aby umożliwić jego działanie w moim projekcie.
Utwórz niestandardowy kontroler błędów:
Następnie utwórz niestandardową fabrykę kontrolera:
Na koniec dodaj zastąpienie do niestandardowego kontrolera błędów:
I to wszystko. Nie ma potrzeby wprowadzania zmian w pliku Web.config.
źródło
1) Utwórz abstrakcyjną klasę kontrolera.
2) Dziedzicz tę klasę abstrakcyjną we wszystkich kontrolerach
3) I dodaj widok o nazwie „NotFound” w folderze Udostępniony widok.
źródło
Przejrzałem większość rozwiązań opublikowanych w tym wątku. Chociaż to pytanie może być stare, wciąż ma ono zastosowanie do nowych projektów, więc spędziłem sporo czasu, czytając odpowiedzi przedstawione tutaj, a także gdzie indziej.
Kiedy @Marco wskazał różne przypadki, w których może wystąpić 404, sprawdziłem rozwiązanie, które razem skompilowałem z tą listą. Oprócz jego listy wymagań dodałem jeszcze jedną.
To rozwiązanie jest 2-krotnie:
Pierwsza część pochodzi z @Guillaume na https://stackoverflow.com/a/27354140/2310818 . Ich rozwiązanie zajmuje się wszystkimi 404, które zostały spowodowane z powodu nieprawidłowej trasy, nieprawidłowego kontrolera i nieprawidłowego działania.
Chodzi o utworzenie formularza internetowego, a następnie wywołanie akcji NotFound kontrolera błędów MVC. Robi to wszystko bez żadnego przekierowania, więc nie zobaczysz ani jednego 302 w Fiddler. Oryginalny URL jest również zachowany, co czyni to rozwiązanie fantastycznym!
Druga część pochodzi z @ Germán na https://stackoverflow.com/a/5536676/2310818 . Ich rozwiązanie zajmuje się każdym 404 zwróconym przez twoje działania w postaci HttpNotFoundResult () lub zgłasza nowy HttpException ()!
Chodzi o to, aby filtr spojrzeć na odpowiedź, a także wyjątek zgłoszony przez kontrolery MVC i wywołać odpowiednią akcję w kontrolerze błędów. Ponownie to rozwiązanie działa bez przekierowań, a oryginalny adres URL zostaje zachowany!
Jak widać, oba te rozwiązania razem oferują bardzo solidny mechanizm obsługi błędów i spełniają wszystkie wymagania wymienione przez @Marco, a także moje wymagania. Jeśli chcesz zobaczyć działającą próbkę lub wersję demonstracyjną tego rozwiązania, zostaw komentarz i chętnie go zbiorę.
źródło
Przejrzałem wszystkie artykuły, ale nic dla mnie nie działa: mój użytkownik wymagający wpisania czegokolwiek na niestandardowej stronie 404 adresu URL powinien się wyświetlić. Myślałem, że jest to bardzo proste. Ale powinieneś zrozumieć obsługę 404 poprawnie:
Uważam, że ten artykuł jest bardzo pomocny. Powinien być czytany od razu. Strona błędu klienta - Ben Foster
źródło