在MVC.Net属性中获取ServiceStack会话

时间:2016-09-27 16:01:04

标签: c# asp.net-mvc session servicestack

我正在使用带有AuthFeature的MVC.Net和servicestack

Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                new IAuthProvider[]
                {
                    new CredentialsAuthProvider()
                })
                {   IncludeRegistrationService = true });

我想在执行操作方法之前做一个MVC.NET过滤器或属性来进行一些验证和重定向,但是我需要用户会话来完成它。

public class UserConfirmationAttribute : FilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        //Get service stack user session
    }
}

在服务或控制器中很容易获得会话,只需使用SessionAs<AuthUserSession>()。如何在MVC.Net属性中获得服务堆栈用户会话?

1 个答案:

答案 0 :(得分:1)

如果您的FilterAttribute用于继承自ServiceStackController的MVC控制器上的操作,您可以通过以下方式解析它:

var ssController = filterContext.Controller as ServiceStackController;
var session = ssController.ServiceStackProvider.SessionAs<AuthUserSession>();

否则,您可以通过以下方式从新的ServiceStackProvider实例获取会话:

var ssProvider = new ServiceStackProvider(filterContext.HttpContext.ToRequest());
var session = ssProvider.SessionAs<AuthUserSession>();