Asp.Net’de Ashx Sayfaları

Şayet temel http isteklerine karşılık yanıtınızın (response) içerik tipi (content type) html dışında (html de olabilir), xml ya da resim, pdf, excel, word vb. gibi binary tipler olacaksa en uygun çözüm ashx sayfalarıdır. Çünkü ashx sayfalarının yaşam döngüsü aspx sayfalarına göre daha az işlem içerir. Html dışında dedim çünkü çıktınız html olacaksa aspx sayfaları kullanmanız daha pratik olacaktır.

Sitenize bir ashx sayfası eklemek için solution explorer da sitenize sağ tulşa tıklayıp Add new item menüsüne tıklayın. Açılan pencereden “Generic Handler” öğesini seçip uygun ismi verdikten sonra Add düğmesine tıklayın.

Ashx sayfaları varsayılan olarak “code behind” değildir. Yani sayfa kodunda değişiklik yaptığınızda projenizi yeniden derlemeniz gerekmez. Tabi bu ashx sayfalarının derlenmediği anlamına da gelmez.

Aşağıda tipik bir ashx örnek uygulaması bulunmaktadır. Görüldüğü üzere Downloader sınıfı IHttpHandler arayüzünü ve System.Web.SessionState.IRequiresSessionState arayüzünü uygulamaktadır. Aslında sadece IHttpHandler arayüzünü uygulamak yeterlidir ancak aşağıdaki uygulamada olduğu gibi, Sessiona erişilecekse System.Web.SessionState.IRequiresSessionState arayüzü de eklenmelidir. Aksi taktirde context.Session null olacaktır.

Uyuglama üye girişi yapılmışsa bir xls dosyasının kullanıcı tarafından indirilebilmesini sağlayacaktır. Aksi taktirde ziyaretçiye bir yetki hatası mesajı verecektir.

using System;
using System.Web;
using System.IO;

public class Downloader : IHttpHandler,
    System.Web.SessionState.IRequiresSessionState
{

    public void ProcessRequest(HttpContext context)
    {

       Uye  tmp =  context.Session["aktifUye"] as Uye;
        if (tmp == null || tmp.Uye_ID == 0)
        {
            context.Response.Write("Dosyayı indirmeye yetkiniz yok!Lütfen üye olunuz");
            context.Response.End();
        }

        string path = context.Server.MapPath("liste.xls");
        FileInfo file = new FileInfo(path);
        context.Response.AddHeader("Content-Length", file.Length.ToString());
        context.Response.ContentType = "application/vnd.ms-excel";
        context.Response.WriteFile(file.FullName);
        context.Response.End();

    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

0 Cevaplar » “Asp.Net’de Ashx Sayfaları”


  • Yorum Yok

Yorum yapın