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:
- Egy üres ASPX oldal hozzáadása a webalkalmazáshoz
- 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
- A renderben az eddigi válasz-összeállítás törlése ( Response.Clear(); )
- Az általam generált válasznak megfelelő HTTP headerek beállítása ( pl: Response.AddHeader( "Content-Type", "image/gif" ); )
- 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.