SORU
8 Mart 2011, Salı


Ajax çağrıları işleme oturum zaman aşımı

Bir ajax çağrısı kullanarak ASP.NET mvc denetleyicisi bir eylem için bir WordPress kullanmak yapıyorum:

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult GetWeek(string startDay)
        {
            var daysOfWeek = CompanyUtility.GetWeek(User.Company.Id, startDay);
            return Json(daysOfWeek);
        }

Oturum zaman aşımına, bu ara Kullanıcı nesnesi oturum saklanır gibi başarısız olur. Bir özel oturuma kaybı olup olmadığını kontrol etmek için öznitelik yetki ve oturum açma sayfasına yeniden yönlendirme yaptım. Bu sayfa istekleri, ancak bir ajax isteği yönlendirebilirsiniz olarak ajax istekleri için işe yaramıyor için gayet iyi çalışıyor:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class AuthorizeUserAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (!httpContext.Request.IsAjaxRequest())
            {//validate http request.
                if (!httpContext.Request.IsAuthenticated
                    || httpContext.Session["User"] == null)
                {
                    FormsAuthentication.SignOut();
                    httpContext.Response.Redirect("~/?returnurl="   httpContext.Request.Url.ToString());
                    return false;
                }
            }
            return true;
        }
    }

Okuduğum başka bir iş parçacığı o zaman kullanıcı değil doğrulanmış ve bir ajax isteği olmalıdır. bu durum kodu, 401 (yetkisiz) ve daha sonra kontrol için js ve onları yönlendirme oturum açma sayfası. Ancak, bu çalışma alamıyorum:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (Request.IsAjaxRequest() && (!Request.IsAuthenticated || User == null))
            {
                filterContext.RequestContext.HttpContext.Response.StatusCode = 401;
            }
            else
            {
                base.OnActionExecuting(filterContext);
            }
        }

Temelde, katılaşıp bunun için 401, ama olsun, devam denetleyiciyi eylem ve atmak bir nesne ref değil ayarlamak için bir örnek, bir nesne hata, sonra geri hata 500 geri istemci tarafı js. Eğer benim özel öznitelik ajax istekleri de doğrulamak için Yetki ve yetkili olmayanlar için sahte dönüş değiştirirsem, ajax isteğini belli olmaz benim giriş sayfam dönüş yapar.

Bu nasıl bir çalışma alabilir miyim?

CEVAP
9 Mart 2011, ÇARŞAMBA


[Authorize] öznitelik, istemci komut senaryo düzgün bir şekilde işlemek için izin verecek yetkisiz erişim halinde: 401 bir özel durum üretiliyor yerine JSON döndürür bir özel yazabilirsin

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.Result = new JsonResult
            {
                Data = new 
                { 
                    // put whatever data you want which will be sent
                    // to the client
                    message = "sorry, but you were logged out" 
                },
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

sonra istemci ve: denetleyici/eylem süsleyin

$.get('@Url.Action("SomeAction")', function (result) {
    if (result.message) {
        alert(result.message);
    } else {
        // do whatever you were doing before with the results
    }
});

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • cosmicrocketman

    cosmicrocket

    17 NİSAN 2006
  • sWooZie

    sWooZie

    9 ŞUBAT 2006