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
[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
}
});

JQuery ajax varsayılan zaman aşımı değ...
JQuery'In ajax varsayılan zaman a...
Nasıl Grails uygulama için bir oturum ...
Zaman aşımı ayarlamak için ajax () jQu...
Belirlemek dolar.ajax hata zaman aşımı...