2012-11-20 8 views
8

私は、このカスタム属性がユーザーからsessionIdを取得するように、自分のコントローラの各アクションで構成するアクセス許可属性を作成しようとしています。HttpActionContextからセッションを取得する

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

答えて

9

使用この

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) 

を持っていないという事実を考えるとEDIT : 私のコードは、そのようなものです試してみてください

System.Web.HttpContext.Current.Session 
+0

MVC4を使用しているため、ActionExecutingContextでオーバーライドされません。 – MuriloKunze

+0

Ok。私は、actionContextにあなたがセッションにアクセスできるようにするプロパティHttpContextを持たないと仮定します。 – Mihai

+0

ええ、それはありません。 – MuriloKunze

0

ActionFilterAttributeでOnActionExectingイベントを使用してアクセスしようとすると、System.Web.HttpでHttpContextのアクセシビリティを提供しません。

代わりに、System.Web.Mvcを使用してアクセスしようとすると、ActionExecutingContextクラスの助けを借りて、現在のセッションにonActionExectingイベントが提供されます。

関連する問題