Adım 1: Sayfanızda veya layout dosyasınızda aşağıdaki jquery fonksiyonunu eklemeniz gerekiyor.
ajaxComplete metodu adından da anlaşılacağı gibi tüm ajax methotlarının tamamlanmasından sonra çağrılan metottur. Gördüğünüz gibi ajax metodunun tamamlanmasından sonra http status kontrol ediliyor eğer bu kod 401(Unauthorized) ise sayfayı loginURL'e yönlendiriyoruz.
Adım 2: Yukarıdaki işlem yeterli gibi görünse de önemli bir problem var. Yukarıda tanımladığımız xhr.status 401 olması için request'i handle etmeniz gerekecektir. Bir örnekle bu problemi anlatalım. Örneğin tanımladığınız bir ajax metodu var ve sonucunda JSON değer dönüyor. Fakat bu metodu çağırdığınızda forms authentication zaman aşımına uğramış ise siz JSON beklerken sayfa size login url'deki sayfa içeriğini getirir ve normal bir sayfa içeriği yüklediği için status 200 olacaktır. Bu sorunu aşmak için de global.asax dosyasında request'in sonlandığı yerde response'u değiştiriyoruz.

Öncelikle teşekürler
YanıtlaSilÇok yararlı bir bilgi paylaşmışsınız fakat bir sorum olucak
request handle ettiğimiz yerde if bloğu içinde statscode control ünü 302' ye göre kontrol ettmişsiniz oysa bende timeout olsa bile sürekli 200 dönüyor bir fikriniz varmıdır.Yardımlarınızı bekliyorum
Merhaba Ersel,
YanıtlaSil200 dönmesi için aklıma gelen 3 neden var.
1- Çağırdığın metotta veya onu kapsayan class'ta Authorize etiketi var mı? Login page'e yönlendirilmeni sağlayan bu etikettir.
2- Single page bir uygulama yapıyorsundur ve login ekranında secure sayfalarında aynı sayfada farklı durumlarda gösteriliyordur. Bu nedenle login sayfası başka bir sayfa olmadığı için 302 değil de 200 döner.
3- Ajax metodu çağırmak için kullandığın jquery ajax metodundaki async özelliği false'tur ve IsAjaxRequest'i geçemiyorsundur ve aslında 200 olarak gördüğün başka bir requesttir.
Aklıma gelen sebepler bunlar, olur da bunlar problemine çözüm olmazsa yaptığın kodla ilgili kısa bir örneği gönderirsen o örneğe göre çözmeye çalışırız.
Kolay gelsin.
Merhabalar
SilHızlı cevap için teşekkür ederim!Yukarıdaki dediklerinizi kontrol ettim ve bir case bulamadım.Ancak kod bloğunu aşağıdaki gibi değiştirdim ve normal çalıştığını gördüm.Bir yanlışlık olmayacağını düşünüyorum aşağıdaki gibide
if (!User.Identity.IsAuthenticated && context.Request.IsAjaxRequest())
{
context.Response.Clear();
context.Response.StatusCode = 401;
}
Herhangi bir hataya sebep olmaz.Farklı bir yoldan da olsa çözmüş olmana sevindim . iyi çalışmalar...
Sil