Próbuję utworzyć niestandardową stronę błędu HTTP 404, gdy ktoś wpisze adres URL, który nie wywołuje prawidłowej akcji lub kontrolera w ASP.NET MVC, zamiast wyświetlać ogólny błąd ASP.NET „Nie znaleziono zasobu”.
Nie chcę do tego celu używać pliku web.config.
Czy jest jakaś magia routingu, którą mogę zrobić, aby złapać nieprawidłowe adresy URL?
Aktualizacja: wypróbowałem udzieloną odpowiedź, ale nadal otrzymuję brzydki komunikat „Nie znaleziono zasobu”.
Kolejna aktualizacja: Ok, podobno coś się zmieniło w RC1. Próbowałem nawet specjalnie przechwytywać 404 na an HttpException
i nadal wyświetla mi się strona „Nie znaleziono zasobu”.
Użyłem nawet funkcji zasobów MvcContrib i nic - ten sam problem. Jakieś pomysły?
Odpowiedzi:
Po prostu dodaj złap całą trasę na końcu tabeli tras i wyświetl na niej dowolną stronę.
Zobacz: Jak utworzyć trasę przechwytującą wszystkie, aby obsłużyć zapytania „Nie znaleziono strony 404” dla ASP.NET MVC?
źródło
Próbowałem włączyć niestandardowe błędy na serwerze produkcyjnym przez 3 godziny, wydaje się, że znalazłem ostateczne rozwiązanie, jak to zrobić w ASP.NET MVC bez żadnych tras.
Aby włączyć niestandardowe błędy w aplikacji ASP.NET MVC, potrzebujemy (IIS 7+):
Skonfiguruj niestandardowe strony w konfiguracji internetowej w
system.web
sekcji:RemoteOnly
oznacza, że w sieci lokalnej zobaczysz prawdziwe błędy (bardzo przydatne podczas programowania). Możemy również przepisać stronę błędu dla dowolnego kodu błędu.Ustaw parametr Magic Response i kod statusu odpowiedzi (w module obsługi błędów lub w atrybucie uchwytu błędu)
Ustaw kolejne magiczne ustawienie w konfiguracji internetowej w
system.webServer
sekcji:To była ostatnia rzecz, jaką znalazłem i po tym widzę niestandardowe błędy na serwerze produkcyjnym.
źródło
customErrors
wyników w przekierowaniu 302 tylko w celu załadowania strony błędu.Mam obsługę błędów do pracy, tworząc ErrorController, który zwraca widoki w tym artykule. Musiałem również dodać „Catch All” do trasy w global.asax.
Nie widzę, jak dotrze do którejkolwiek z tych stron błędów, jeśli nie ma jej w pliku Web.config ..? Mój Web.config musiał określić:
a potem dodałem też:
źródło
Źródło
NotFoundMVC - zapewnia przyjazną dla użytkownika stronę 404 za każdym razem, gdy kontroler, akcja lub trasa nie zostanie znaleziona w aplikacji ASP.NET MVC3. Widok o nazwie NotFound jest renderowany zamiast domyślnej strony błędu ASP.NET.
Możesz dodać tę wtyczkę za pośrednictwem nuget przy użyciu: Install-Package NotFoundMvc
NotFoundMvc instaluje się automatycznie podczas uruchamiania aplikacji internetowej. Obsługuje wszystkie różne sposoby, w jakie 404 HttpException jest zwykle generowane przez ASP.NET MVC. Obejmuje to brakujący kontroler, akcję i trasę.
Instrukcja instalacji krok po kroku:
1 - Kliknij prawym przyciskiem myszy swój projekt i wybierz Zarządzaj pakietami Nuget ...
2 - Wyszukaj
NotFoundMvc
i zainstaluj.3 - Po zakończeniu instalacji do projektu zostaną dodane dwa pliki. Jak pokazano na poniższych zrzutach ekranu.
4 - Otwórz nowo dodany plik NotFound.cshtml obecny w Views / Shared i zmodyfikuj go według własnego uznania. Teraz uruchom aplikację i wpisz nieprawidłowy adres URL, a zostaniesz powitany przyjazną dla użytkownika stroną 404.
Nigdy więcej, użytkownicy otrzymają komunikat o błędzie, taki jak
Server Error in '/' Application. The resource cannot be found.
Mam nadzieję że to pomoże :)
PS: Wyrazy uznania dla Andrew Davey za zrobienie tak niesamowitej wtyczki.
źródło
Spróbuj tego w pliku web.config, aby zastąpić strony błędów usług IIS. To chyba najlepsze rozwiązanie, które wysyła również prawidłowy kod statusu.
Więcej informacji od Tipila - Użyj niestandardowych stron błędów ASP.NET MVC
źródło
To rozwiązanie nie wymaga zmian w pliku web.config ani tras typu catch-all.
Najpierw utwórz taki kontroler;
Następnie utwórz widok w „Views / Error / Index.cshtml” jako;
Następnie dodaj następujące elementy w pliku Global asax, jak poniżej:
Jeśli po wykonaniu tej czynności nadal pojawia się niestandardowa strona błędu usług IIS, upewnij się, że następujące sekcje są zakomentowane (lub puste) w pliku konfiguracji sieci Web:
źródło
Response.End();
na końcu programu obsługi Application_Error. Bez tego wyzwalane jest tylko pierwsze wystąpienie błędu dla danej sesji, co jest problemem w przypadku np. Niestandardowego logowania błędów w module obsługi Application_Error.Jeśli pracujesz w MVC 4, możesz obejrzeć to rozwiązanie, u mnie zadziałało.
Dodaj następującą metodę Application_Error do my
Global.asax
:Sam kontroler jest naprawdę prosty:
Sprawdź pełny kod źródłowy Mvc4CustomErrorPage na GitHub .
źródło
Miałem ten sam problem, co musisz zrobić, to zamiast dodawać atrybut customErrors do pliku web.config w folderze Views, musisz dodać go do pliku web.config w katalogu głównym projektów
źródło
Oto prawdziwa odpowiedź, która pozwala w pełni dostosować stronę błędu w jednym miejscu. Nie ma potrzeby modyfikowania pliku web.config ani tworzenia oddzielnego kodu.
Działa również w MVC 5.
Dodaj ten kod do kontrolera:
Na podstawie http://www.eidias.com/blog/2014/7/2/mvc-custom-error-pages
źródło
Opowiem o kilku konkretnych przypadkach,
jeśli używasz „metody PageNotFound” w HomeController, jak poniżej
to by nie zadziałało. Ale musisz wyczyścić tagi trasy, jak poniżej,
A jeśli zmienisz to jako nazwę metody w pliku web.config, to działa. Nie zapomnij jednak zrobić kodu jak poniżej w web.config
źródło