我的MVC应用程序中的安全性设置了一个授权属性...
public class UserLoggedInAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Session["UserId"] == null)
{
var values = new { controller = "Home", action = "Index" };
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(values));
}
}
}
然后我还有一个.ashx HttpHandler,由jQuery上传控件调用....
public class UploadFile : IHttpHandler, IReadOnlySessionState
{
...
private bool EnsureSecureTransaction(HttpContext context)
{
if (context.Session["UserId"] == null)
{
return false;
}
else
{
return true;
}
return true;
}
}
当调用EnsureSecureTransaction()时,会话将返回null。但是在我的MVC动作中读取的会话却没有。我注意到我正在使用filterContext进行会话。
我试图更改所有代码以尝试并像这样引用HttpContext.Current.Session
[HttpPost]
public ActionResult Logon(AdminModel model)
{
if (model.UserName == "x" && model.Password == "x")
{
HttpContext.Session["UserId"] = "true";
return RedirectToAction("CreateBlog", "Blog");
}
return View;
}
private bool EnsureSecureTransaction(HttpContext context)
{
if (context.Session["UserId"] == null)
{
return false;
}
else
{
return true;
}
return true;
}
但基本上当我点击EnsureSecureTransaction()块时,它仍然说我的Session [“UserId”]为空,因此不能正确识别对.ashx文件的调用。
任何人都知道这是为什么?什么是AuthorizationContext和HttpContext关于它们携带的会话的实际区别,以及如何解决这个问题?