9

我正在尝试创建一个权限属性以在我的控制器的每个操作中进行配置,因此这个自定义属性应该从用户那里获取 sessionId。我的代码是这样的:

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");
    }
}
4

2 回答 2

10

用这个

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if(filterContext.HttpContext.Session != null)
    {
      var id = filterContext.HttpContext.Session["Id"];          
    }
}

编辑 鉴于您使用的是 MVC 4 而您没有

public override void OnActionExecuting(ActionExecutingContext filterContext)

尝试使用

System.Web.HttpContext.Current.Session
于 2012-11-20T11:31:35.333 回答
0

如果您尝试使用 ActionFilterAttribute 进行访问,则 OnActionExecting 事件不会提供 HttpContext 与 System.Web.Http 的可访问性。

相反,如果您尝试使用 System.Web.Mvc 访问,它将在 ActionExecutingContext 类的帮助下为您提供带有 onActionExecting 事件的当前会话。

于 2017-12-10T12:27:58.367 回答