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

  • optionalinfo

    optionalinfo

    29 EKİM 2005
  • Project Mooncircle

    Project Moon

    6 Aralık 2009
  • Unbox Therapy

    Unbox Therap

    21 Aralık 2010