Dinamikus szerveroldai erőforrás előállítása kamu ASPX oldalakkal

ASP.NET-ben szerveroldali erőforrás generálásra (például egy kép, vagy egy excel tábla) számtalan lehetőség létezik. Talán a legkorrektebb a saját HttpHandler készítése. Leggyakrabban mégis egy quick & dirty megoldást használok: a szerveroldali erőforrást egy kamu aspx oldallal generálom.

A módszer nagyon egyszerű, mégis mindig megfeledkezek a részletekről, ezért is próbálom most egy rövid bejegyzésben összefoglalni - magamnak biztosan - a szükséges lépéseket.

Nagyon röviden:

  1. Egy üres ASPX oldal hozzáadása a webalkalmazáshoz
  2. A HTML generálás felülbírálására az oldal void Render( HtmlTextWriter writer ) metódusának felülírásával
  3. A renderben az eddigi válasz-összeállítás törlése ( Response.Clear(); )
  4. Az általam generált válasznak megfelelő HTTP headerek beállítása ( pl: Response.AddHeader( "Content-Type", "image/gif" ); )
  5. A generált tartalom betolása a válaszba ( pl.: Response.BinaryWrite( content ); )

Jó, és akkor most jönne a (majdnem) mindig copy-pastelhető tipikus forráskódrészlet egy CSV file összeállítására :

    protected override void Render( HtmlTextWriter writer )
    {
        Response.Clear();
        Response.ContentEncoding = Encoding.GetEncoding( "iso-8859-2" );
        Response.AddHeader( "Content-Disposition", "attachment; filename=adatok.csv" );
        Response.ContentType = "application/vnd.ms-excel";
        Response.Write( GenerateExcel() );
        Response.Flush();
    }

Ha mondjuk az oldalt Excel.aspx-nek nevezem, és bárhonnan rálinkelek, akkor a linkre kattintók A GenerateExcel() metódusban összeállított CSV filet töltik le.



Dávid Zoltán

Dávid Zoltán Mérnök Informatikusként végeztem a BME-n, jelenleg webfejlesztéssel és gépi tanulással foglalkozom.

2008.05.30. 18:24:59 | Permalink | Hozzászólások: 2 | Tárgyszavak: ,


  • Zermatt

    Balássy György (MS RD, ASP.NET MVP, MCTS) Zermatt egy kisváros Svájc déli részén, mindössze tíz kilométerre az olasz határtól. A kb. 5500 fős település zsákfalu, 1620 méteres tengerszint feletti magasságban egy völgy végében, egy gleccser közelében fekszik. Érdekesség, hogy a tiszta levegő megóvása érdekében belső égésű motorokkal hajtott autók nem hajthatnak be a városba. Síparadicsom, csendes kisváros gyönyörű környezetben. Mi vezette a Microsoft fejlesztőit arra, hogy épp ezt a várost válasszák egy fejlesztői keretrendszer kódnevévé? Tovább »
  • Unable to cast

    Dávid Zoltán Szomorú, de igaz, néha a stack trace és a részletes magyarázat is kevés a hiba megértéséhez. Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások


Dávid Zoltán Dávid Zoltán  (2008.05.31. 11:27:28)

Szerintem a megszokas es az, hogy egy ilyen oldal copy paste-tel telepitheto. En meg azert is csinalom neha ezt, mert van, hogy az aspx oldalt eredetileg teljesen normalisan hasznalom: mondjuk egy GridView van rajta. Aztan rateszek egy "letoltes" gombot, amit ha megnyomnak, akkor kiszedi a grid-bol az adatot, es az if-fel ellatott Render ilyenkor a fenti modon visszatolja az adatokat csv-ben. Kulonben pedig siman base.Render()-t hiv tovabb.

Gergő Gergő  (2008.05.30. 20:02:46)

Sosem értettem, hogy az emberek miért használják ezt szívesebben, mint egy ASHX handlert. Azzal van valami gond, vagy csak egyszerűen nem ahhoz szoktak?