Aspnet MVC Ajax Attribute

Asp.net MVC  sadece ajax işlemleri için kullanılan metotlarımıza özellik ekleyeceğiz. Ekleyeceğimiz bu özellik sadece ajax işlemlerinde çalışmasını sağlayacaktır. MVC'de kullanmış olduğumuz metodumuzu filterlarmış oluyoruz.

Burada tam yapmak istediğimiz şey.

Bir ajax işlemimiz mevcut bu işlemimizde bir urlimiz var burada urlde çalışacak metodumuza dışarıdan erişilmesini istemiyoruz sadece ajax istediğ -request- gerçekleşirse bu metodumuzun çalışmasını sağlayacağız.

Projemize klasor oluşturalım içerisinde projemizde kullanıcağımız Filterların bulunduğu bir klasör olsun.

Ben adına CustomFilter dedim siz Filterda diyebilirsiniz.

Bu -CustomFilter- klasörümüzün içerisine yeni bir class oluştuyoruz.

public class AjaxOnlyAttribute
{
}

Ben adını AjaxOnlyAttribute verdim. Bizim burada yapıcağımız filterlama action metodumuzla alakalı olduğu için ActionFilterAttribute den kalıtım alacağız.

public class AjaxOnlyAttribute : ActionFilterAttribute
{
}

ActionFilterAttribute'dan kalıtım aldık artık ActionFilterAttribute'daki virtual metoları burada override edip kullanabiliriz. Bizim ihtiyaçımız olan asıl virtual metodumuz OnActionExecutingdir.

OnActionExecuting Action metodumuza istek geldiği anda çalışmaya başlayan metodumuz.

public class AjaxOnlyAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //Gelen request-istek- Ajax mı diye kontrol ediyoruz.
        if (!filterContext.HttpContext.Request.IsAjaxRequest())
        //eğer ajax değilse ana sayfaya yönlendirme işlemi yapıyoruz tabi siz burada ne yapmak istiyorsanız yapabilirsiniz
        filterContext.HttpContext.Response.Redirect("/");
    }
}

Evet artık filter attributemüzü oluşturduğumuza göre bunu nasıl kullanıcağımıza gelelim.

Örnek olarak HomeController içerisinde bir metodumuz var bu metodumuz ajax tarafından kullanılmaktadır.

 $(function () {
     $("body").on("click", ".view", function () {
         var url = '/Home/EmployeeDetail/2';
         //bu urlimizi post et
         $.post(url, function (data) { })
         //eğer işlemimiz başarılı bir şekilde gerçekleşirse
         .done(function (data) {
         ...
         })
         //eğer işlem başarısız olursa
         .fail(function () {
         ...
         })
    });
})

Bu metodumuza dışarıdan herhangi bir işlemle değil sadece ajax isteği olduğunda erişilmesini istediğimden dolayı metodumuzun başına oluşturmuş olduğumuz [AjaxOnly] attribute ekliyoruz.

//attributemiz
[AjaxOnly]
public ActionResult EmployeeDetail(int? id)
{
...
}

Özet geçersek..

Action metodumuza bir istekde bulunuluyor.. başında attribute olduğundan dolayı ilk önce attribute gidiliyor.. attribute içerisinde yapılan işlemlere bakılıyor.. oradan gelen sonuca göre işlemimiz devam ediliyor.

Bildiğim kadarıyla bir şeyler yazmaya çalıştım inşallah birilerinin faydalanması dileğiyle..