ServiceStack将身份验证放到Razor视图中

Tom*_*Tom 5 .net c# razor servicestack

(我说的是纯SS项目,请不要与MVC Razor混淆)

我们如何通过身份验证限制对SS Razor视图的访问?

也就是说,我们如何从SS Razor调用用户会话和身份验证代码?

我希望做这样的事情:

@inherits ViewPage
@Authenticate(RedirectUrl = "/Login")

<div>Hello @UserSession.UserName</div>
<div>You are in the secured area now</div>
Run Code Online (Sandbox Code Playgroud)

Ost*_*mar 3

我不知道有什么方法可以直接从 SS Razor 页面执行此操作。然而,当我遇到同样的困境时,我通过创建一个提供页面的服务来解决它。这样,您可以使用该Authorize属性来装饰页面的服务,如果用户未经过身份验证,它将重定向到登录页面。

[Authorize]
public class MyPageService : IService<MyRequestDTO>
{
    public object Execute(MyRequestDTO request)
    {
        ...
        return new MyPageViewModel();
    }
}
Run Code Online (Sandbox Code Playgroud)

要在 razor 页面中检索当前会话,您可以使用GetSession<T>.

@{
    var currentSession = GetSession<CustomUserSession>();
}

<div>Hello @currentSession.UserName</div>
Run Code Online (Sandbox Code Playgroud)

这样做的另一个优点是您可以获得强类型视图并从服务为视图提供数据。

@inherits ViewPage<MyPageViewModel>
Run Code Online (Sandbox Code Playgroud)