Omezení velikosti HTTP požadavku v ASP.NET
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Omezení velikosti HTTP požadavku v ASP.NETOmezení velikosti HTTP požadavku v ASP.NET

 

Omezení velikosti HTTP požadavku v ASP.NET

Google       Google       9. 10. 2007       8 489×

V tomto krátkém článku bych vám rád ukázal, jak omezit maximální velikost HTTP požadavku v prostředí ASP.NET. Dozvíte se, jak maximální velikost nastavit a jak zabránit pádu aplikace, který nastane při jejím překročení.

Reklama
Reklama

Téměř každý z vás už někdy potřeboval na server odeslat nějaký soubor a následně ho uložit do složky/databáze (tím se zabývat nebudu). Data všech odesílaných souborů jsou součástí HTTP requestu a tak se může snadno stát, že dojde k překročení jeho maximální velikosti.

Mým dnešním úkolem je říct vám, jak takovou maximální velikost nastavit a jak zabránit pádu aplikace v případě jejího překročení.

Změna maximální velikosti

Konfigurace probíhá samozřejmě v souboru web.config a tentokrát stačí přidat jeden řádek kódu do sekce .

<httpRuntime maxRequestLength="6144" />

Hodnotu attributu maxRequestLength je nutné zadávat v kilobytech. Defaultní hodnota je 4096 kB.

Ověření velikosti požadavku

Nejlepším místem pro ověření velikosti požadavku je podle mě soubor global.asax, který vytváří třídu odvozenou od třídy HttpApplication a může tak reagovat na různé aplikační události.

V první řadě je dobré ze souboru web.config získat maximální velikost požadavku, to lze provést při inicializaci aplikace. Proměnná maxRequestLength je definována ve stejné třídě a ve výchozím stavu je její hodnota 4096.

/// <summary>
/// Při inicializaci aplikace zjistí, jaká je maximální velikost HTTP požadavku.
/// </summary>
public override void Init()
{
    // získá sekci <httpRuntime>
    HttpRuntimeSection section = ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;

    // předá hodnotu attributu maxRequestLength
    if (section != null)
    {
        this.maxRequestLength = section.MaxRequestLength;
    }

    // inicializuje aplikaci
    base.Init();
}

Následně musíte porovnat maximální velikost s velikostí právě probíhajícího požadavku, a to nejlépe hned na jeho začátku. Pokud to neuděláte, může dojít k pádu aplikace.

/// <summary>
/// Pokud velikost požadavku přesáhne maximální velikost, přesměruje na stránku s chybou.
/// </summary>
private void Application_BeginRequest(object sender, EventArgs e)
{
    // pokud jde o stránku s uploadem
    if (this.Request.Path.ToLower().Contains("default.aspx"))
    {
        // získá aktuální velikost požadavku
        long requestLength = this.Request.ContentLength;

        // pokud přesahuje maximální velikost požadavku
        if ((requestLength / 1024) > maxRequestLength)
        {
            // přesměruje na stránku s chybou
            this.Response.Redirect(string.Format("{0}?action=error&size={1}", this.Request.Path, this.maxRequestLength));
        }
    }
}

Věřím, že jsem vás přivedl na správnou cestu a že už zbytek zvládnete sami. Pokud s tím budete mít problémy, můžete si stáhnout zdrojové kódy celé aplikace (kompilace vyžaduje Web Application Project).

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Dušan JanošíkDušan vyvíjí software a webové aplikace na platformě .NET. Je milovníkem neuznávaných teorií, a zajímá se o parapsychologii a teraristiku.
Web     Twitter     Facebook     LinkedIn    

Nové články

Obrázek ke článku Facebook spouští službu Marketplace V ČR

Facebook spouští službu Marketplace V ČR

Společná platforma Marketplace usnadní lidem na Facebooku vyhledávání, nákup a prodej použitého zboží na lokální úrovni. Bude tak přímou konkurencí pro weby a aplikace se stejným zaměřením jako je například Letgo, Bazoš, Aukro, Sbazar a další.

Reklama
Reklama
Obrázek ke článku DistrCut – optimalizace pomocí distribuované inteligence

DistrCut – optimalizace pomocí distribuované inteligence

Optimalizační systémy, které jsem dosud popisoval, se týkaly vždy optimalizace na jednom zařízení. Optimalizovalo se dělení tyčového materiálu na jedné pile, vypalování plošného materiálu na jednom plazmovém stroji, řídilo se tavení na jedné elektrické obloukové peci.

Ve výrobním procesu je však často nutné optimalizovat činnost celého výrobního úseku, kde je více různých objektů odlišného typu a koordinovat činnost těchto objektů k dosažení společného cíle, zpravidla kvality finálního výrobku. Řešení tohoto problému umožňuje distribuovaná inteligence.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý