Jak zrobić catch all route to handle' 404 page not found ' queries for ASP.NET MVC?
Czy możliwe jest stworzenie ostatecznej trasy, która złapie wszystkie .. i odbija użytkownika do widoku 404 w ASP.NET MVC?
Uwaga: nie chcę tego ustawiać w moich ustawieniach IIS.
8 answers
Sam znalazłem odpowiedź.
Richard Dingwall ma doskonały post przechodząc przez różne strategie. Szczególnie podoba mi się rozwiązanie Filtrattribute. Nie jestem fanem rzucania WYJĄTKÓW, więc zobaczę, czy uda mi się to poprawić:)
Dla świata.asax, po prostu dodaj ten kod jako ostatnią trasę do rejestracji:
routes.MapRoute(
"404-PageNotFound",
"{*url}",
new { controller = "StaticContent", action = "PageNotFound" }
);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-22 00:38:32
To pytanie było pierwsze, ale łatwiejsza odpowiedź pojawiła się w późniejszym pytaniu:]}
Routing dla niestandardowych ASP.NET strona błędu MVC 404
Uruchomiłem obsługę błędów, tworząc Kontroler ErrorController, który zwraca widoki z tego artykułu. Musiałem też dodać " Catch All" do trasy w global.asax.
Nie widzę, jak dostanie się do żadnej z tych stron błędów, jeśli nie jest w sieci.config..? Moja Sieć.config musiał podać:
customErrors mode="On" defaultRedirect="~/Error/Unknown"
I jeszcze dodałem:
Mam nadzieję, że to pomoże.error statusCode="404" redirect="~/Error/NotFound"
Kocham ten sposób teraz, bo to jest takie proste:
<customErrors mode="On" defaultRedirect="~/Error/" redirectMode="ResponseRedirect">
<error statusCode="404" redirect="~/Error/PageNotFound/" />
</customErrors>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:07
Również można obsłużyć nie znaleziono błąd w globalnym.asax.cs jak poniżej
protected void Application_Error(object sender, EventArgs e)
{
Exception lastErrorInfo = Server.GetLastError();
Exception errorInfo = null;
bool isNotFound = false;
if (lastErrorInfo != null)
{
errorInfo = lastErrorInfo.GetBaseException();
var error = errorInfo as HttpException;
if (error != null)
isNotFound = error.GetHttpCode() == (int)HttpStatusCode.NotFound;
}
if (isNotFound)
{
Server.ClearError();
Response.Redirect("~/Error/NotFound");// Do what you need to render in view
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-25 22:28:10
Dodaj tę linię pod główną stroną projektu.plik konfiguracyjny.
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/Test/PageNotFound" />
<remove statusCode="500" />
<error statusCode="500" responseMode="ExecuteURL" path="/Test/PageNotFound" />
</httpErrors>
<modules>
<remove name="FormsAuthentication" />
</modules>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-18 06:39:31
To może być problem, gdy używasz
throw new HttpException(404);
Kiedy chcesz to złapać, nie znam innego sposobu niż edytowanie konfiguracji sieci.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-22 19:46:01
Alternatywą dla tworzenia trasy catch-all jest dodanie metody Application_EndRequest
do MvcApplication
per .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:29
Wewnątrz RouterConfig.cs
Dodaj fragment kodu:
routes.MapRoute(
name: "Error",
url: "{id}",
defaults: new
{
controller = "Error",
action = "PageNotFound"
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-07 07:40:05
Jeśli trasa nie może zostać rozwiązana, to MVC framework przejdzie przez błąd 404.. Najlepszym rozwiązaniem jest użycie filtrów WYJĄTKÓW ... Utwórz własny exceptionfilter i zrób tak..
public class RouteNotFoundAttribute : FilterAttribute, IExceptionFilter {
public void OnException(ExceptionContext filterContext) {
filterContext.Result = new RedirectResult("~/Content/RouteNotFound.html");
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-18 13:49:05