Asp.net mvc 从HttpActionContext获取会话
我正在尝试创建一个权限属性,以便在控制器的每个操作中进行配置,因此此自定义属性应从用户获取sessionId。 我的代码是这样的:Asp.net mvc 从HttpActionContext获取会话,asp.net-mvc,Asp.net Mvc,我正在尝试创建一个权限属性,以便在控制器的每个操作中进行配置,因此此自定义属性应从用户获取sessionId。 我的代码是这样的: public class PermissionChecker: ActionFilterAttribute { private int _permissionId { get; set; } private IUserSelectorService _userService { get; set; } public PermissionCh
public class PermissionChecker: ActionFilterAttribute
{
private int _permissionId { get; set; }
private IUserSelectorService _userService { get; set; }
public PermissionChecker(int permissionId)
{
_permissionId = permissionId;
_userService = new UserSelectorService();
}
public PermissionChecker(int permissionId, IUserSelectorService userService)
{
_permissionId = permissionId;
_userService = userService;
}
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (_userService.HasPermission(_permissionId, /* here I must pass the session["Id"]*/)){
base.OnActionExecuting(actionContext);
return;
}
throw new HttpException(401, "Unauthorized");
}
}
用这个
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(filterContext.HttpContext.Session != null)
{
var id = filterContext.HttpContext.Session["Id"];
}
}
编辑
考虑到您使用的是MVC4,而您没有
public override void OnActionExecuting(ActionExecutingContext filterContext)
试用
System.Web.HttpContext.Current.Session
如果您试图使用ActionFilterAttribute进行访问,那么OnActionExecuting事件将无法通过System.Web.Http访问HttpContext
如果您试图使用System.Web.Mvc访问,它将在ActionExecutingContext类的帮助下为您提供OnActionExecuting事件的当前会话。我使用的是MVC4,因此ActionExecutingContextUk没有覆盖。我假设actionContext没有允许您使用System.Web.HttpContext.Current.SessionOk访问SessionControl的属性HttpContext。试试看。如果有帮助,请记住标记为“已回答:)我使用的是System.Web.Http.Filters的ActionFilterAttribute,而不是System.Web.Mvc,因为使用了此HttpActionContext。感谢