Letní akce PHP týden
Pouze tento týden sleva až 80 % na kurzy PHP. Lze kombinovat s akcí Letní slevy na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!
Avatar
Petr Kasnal
Člen
Avatar
Petr Kasnal:22. února 22:34

Zdravím, dělám . net mvc a řeším odchytávání chyb. Aktuálně to mám udělané takhle:
web.config

<customErrors mode="On" defaultRedirect="~/Error/Index">
     <error statusCode="404" redirect="~/Error/NotFound" />
   </customErrors>

Global.asax:

protected virtual void Application_Error()
       {
           HttpContext httpContext = HttpContext.Current;
           Exception exc = Server.GetLastError();
           LogError(exc);
           Server.ClearError();
       }

Je to takhle ok? Není to například nějak špatně? Víceméně vše funguje jak má. Ale když si zkusím v controlleru úmyslně vyhodit chybu 404 přes return HttpNotFound(); Aplikace mi vůbec neskočí do Application_Error a ani nastavení ve webconfigu nezafunguje, ukáže se stránka viz. příloha. Poradíte mi prosím jak například nasimulovat různé chyby? Budu i rád za rady jestli je to takhle vůbec správně, jestli to nemám udělat jinak. Předem strašně dekuji

Zkusil jsem: Hledat na googlu, ale nenašel jsem nic moc funkčního.

Chci docílit: Snažím se dossáhnout správné funkčnosti.

 
Odpovědět 22. února 22:34
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Kasnal
Petr Kasnal:23. února 8:27

Jenom ještě jedna změna v Application_Error nemám - Server.ClearE­rror();
Spíše mě fakt zajímá jestli je to správný přístup. Díky

 
Nahoru Odpovědět 23. února 8:27
Avatar
Petr Kasnal
Člen
Avatar
Petr Kasnal:23. února 17:14

Víte někdo prosím?

 
Nahoru Odpovědět 23. února 17:14
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Kasnal
vajkuba1234:23. února 18:55

Koukni zde, je to tam hezky vysvetleno i s priklady...

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling?view=aspnetcore-2.2
Nahoru Odpovědět  -2 23. února 18:55
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na vajkuba1234
Petr Kasnal:23. února 20:49

Děkuji, ale tohle je pro core.

 
Nahoru Odpovědět 23. února 20:49
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Kasnal
vajkuba1234:24. února 2:49

Nechapu ty minusy - stacilo se podivat na google.

Vytvor si na to ErrorController, ktery bude mit metodu Index a ta bude vracet view pro error a pak uprav web.config tak, aby odkazoval prave na ten controller.

Web.config

<customErrors mode="On" defaultRedirect="~/Error" >
  <error statusCode="404" redirect="~/Error" />
</customErrors>

Je to treba i zde:

https://stackoverflow.com/a/41137288/3822488

Ten global.asax resit nemusis - jedine, ze bys to tam chtel logovat, ale to muzes udelat i na urovni controlleru, kdy si udelas bazovy controller, ktery bude obsahovat mechanismus pro logovani a z toho bazoveho budou nasledne dedit vsechny controllery.

Nahoru Odpovědět 24. února 2:49
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na vajkuba1234
Petr Kasnal:26. února 16:54

Děkuji. Vím že je tu tahle možnost, ale přes Global/web.config mi to připadá lepší moje otázky zní zda je to tak v pořádku a jakým způsobem vyvolat chybu 404, protože když vyvolám return HttpNotFound(); Aplikace mi vůbec neskočí do Application_Error a ani nastavení ve webconfigu nezafunguje, ukáže se stránka viz. příloha na to jsem vůbec nedostal odpověď.

Editováno 26. února 16:54
 
Nahoru Odpovědět 26. února 16:54
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Kasnal
vajkuba1234:26. února 17:01

V cem ti to pripada lepsi?

Nahoru Odpovědět 26. února 17:01
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Ilja Židkov
Člen
Avatar
Ilja Židkov:27. února 10:47

Všechny interní chyby (výjimky) lze zachytit pomocí filtru.

Project > FilterConfig.cs
public class FilterConfig
{
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
                filters.Add(new HandleErrorAttribute());
        }
}

Společně s Web.config

<customErrors mode="On" defaultRedirect="~/Error"></customErrors> // Error.cshtml v Shared/ složce.

ASP .NET runtime bude vždy vracet "přátelské" Error pohledy.

HttpNotFound() nevrací ASP .NET, ale IIS! Stejně tak jako statické soubory.

A proto, v případě neexistující akce (např. localhost:5000/Ho­me/About):

<customErrors mode="On">
  <error statusCode="404" redirect="~/404.html" />
</customErrors>

V případě neexistujícího statického souboru (např. localhost:5000/i­mage.gif):

Project > Web.config
<system.webServer>
        <httpErrors errorMode="Custom">
                <remove statusCode="404" /> // Odstarní výchozí IIS 404.0 stránku
                <error statusCode="404" path="404.html" responseMode="File"> // Tvá vlastní stránka
        </httpErrors>
</system.webServer>
Editováno 27. února 10:49
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 27. února 10:47
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Ilja Židkov
Petr Kasnal:18. března 20:26

Omlouvám se, že jsem nereagoval dříve. Byl jsem mimo PC. Moc Vám děkuji za rady. :)

 
Nahoru Odpovědět 18. března 20:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.