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

編集MVC4 を使用していて、持っていないという事実を考えると

public override void OnActionExecuting(ActionExecutingContext filterContext)

使ってみてください

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

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

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

于 2017-12-10T12:27:58.367 に答える