ServiceStack:我们可以通过RequestFilterAttribute将数据传递给调用服务

时间:2016-02-23 16:41:46

标签: authentication servicestack jwt sitefinity

也许我正在考虑这个错误,但我正在尝试为我们的CMS创建一个自定义属性来处理身份验证。

https://gist.github.com/sitefinitysteve/62ab761256a64a84d8a6#file-sitefinityjwt-cs-L39

因此,如果从登录用户的CMS内部调用此服务,则用户数据已经存在于服务方法中。

但是在从应用程序调用的上下文中,用户在技术上是匿名的,但是我可以解码令牌并让用户很好......但不知道如何将其传递给服务。

我只是在考虑这个错误,而且正确的做法是调用CMS API方法来记录该人(如果我已经拥有第33行的人员用户对象,那么服务上下文似乎很慢即将到期。

1 个答案:

答案 0 :(得分:3)

使用Request.Items Dictionary

您可以将IRequest.Items字典用于您想要传递的所有数据ServiceStack's Request Pipeline

//RequestFilter:
req.Items["info"] = new MyRequestInfo { ... };

在服务中:

var info = (MyRequestInfo)base.Request.Items["info"];

让DTO共享通用界面

向服务添加额外信息的另一个选择是让Request DTO实现接口,例如:

public interface IHasInfo
{
    MyRequestInfo Info { get; set; }
}

然后您可以在您的请求过滤器中填充,例如:

((MyRequestInfo)dto).Info = new MyRequestInfo { ... };

在服务中访问,就像任何其他DTO属性一样,例如:

public object Any(Request request)
{
    var info = request.Info;
}