2012-11-20 19 views
8

Denetleyicilerimin her eyleminde yapılandırmak için bir izin özniteliği oluşturmaya çalışıyorum, bu nedenle bu özel öznitelik, sessionId öğesini kullanıcıdan almalıdır. Kodum böyledir: BuHttpActionContext'den oturum alın

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

DÜZENLEME MVC'yi 4 kullandığınız gerçeğini göz önüne alındığında ve

public override void OnActionExecuting(ActionExecutingContext filterContext) 

yok

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

cevap

9

Kullanımı

System.Web.HttpContext.Current.Session 
kullanmayı deneyin.
+0

MVC4 kullanıyorum, bu nedenle ActionExecutingContext – MuriloKunze

+0

Ok ile geçersiz kılma yok. Ben actionContext Session – Mihai

+0

Evet erişmenize izin verecek bir özellik HttpContext yok varsayalım, yok. – MuriloKunze

0

ActionFilterAttribute ve OnActionExecting olayını kullanarak erişmeye çalışıyorsanız, HttpContext ile System.Web.Http.

Bunun yerine, System.Web.Mvc kullanarak erişmeye çalışıyorsanız, ActionExecutingContext sınıfının yardımıyla onActionExecting olayı ile geçerli oturumu sağlayacaktır.

İlgili konular