Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Petr Kasnal
Člen
Avatar
Petr Kasnal:22.2.2019 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.2.2019 22:34
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Kasnal
Petr Kasnal:23.2.2019 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.2.2019 8:27
Avatar
Petr Kasnal
Člen
Avatar
Petr Kasnal:23.2.2019 17:14

Víte někdo prosím?

 
Nahoru Odpovědět
23.2.2019 17:14
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Kasnal
vajkuba1234:23.2.2019 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
23.2.2019 18:55
No hope, no future, JUST WAR!
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na vajkuba1234
Petr Kasnal:23.2.2019 20:49

Děkuji, ale tohle je pro core.

 
Nahoru Odpovědět
23.2.2019 20:49
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Kasnal
vajkuba1234:24.2.2019 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.2.2019 2:49
No hope, no future, JUST WAR!
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na vajkuba1234
Petr Kasnal:26.2.2019 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.2.2019 16:54
 
Nahoru Odpovědět
26.2.2019 16:54
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Kasnal
vajkuba1234:26.2.2019 17:01

V cem ti to pripada lepsi?

Nahoru Odpovědět
26.2.2019 17:01
No hope, no future, JUST WAR!
Avatar
Ilja Židkov
Člen
Avatar
Ilja Židkov:27.2.2019 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.2.2019 10:49
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
27.2.2019 10:47
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Ilja Židkov
Petr Kasnal:18.3.2019 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.3.2019 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.