2016-09-27 80 views
1

我使用MVC.Net和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

如果您FilterAttribute是一個MVC控制器從ServiceStackController繼承一個動作你可以從控制器解決它:

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>();