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.

Author: A-Sharabiani, 2008-11-21

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" }
    );
 78
Author: Pure.Krome,
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:

error statusCode="404" redirect="~/Error/NotFound"
Mam nadzieję, że to pomoże.

Kocham ten sposób teraz, bo to jest takie proste:

 <customErrors mode="On" defaultRedirect="~/Error/" redirectMode="ResponseRedirect">
    <error statusCode="404" redirect="~/Error/PageNotFound/" />
 </customErrors>
 20
Author: smdrager,
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
    }
}
 7
Author: MSDs,
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>

 4
Author: Vicky,
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.

 3
Author: Paco,
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 .

 1
Author: Edward Brey,
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"

           });
 1
Author: solanki dev,
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");
   }
}
 0
Author: Laxmeesh Joshi,
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