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

ServiceStack: Can we Pass Data through a RequestFilterAttribute to the calling service

也许我的想法有误,但我正在尝试为我们的 CMS 创建一个自定义属性来处理身份验证检查。

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

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

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

我是不是看错了,正确的做法是调用 CMS API 方法来让那个人登录(如果我已经从行中获得了 persons 用户对象,这似乎很慢33,服务上下文立即过期。

使用Request.Items字典

您可以使用 IRequest.Items 字典来存储您想要在整个过程中传递的任何数据 ServiceStack's Request Pipeline:

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

在役:

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

有DTO的共享通用接口

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

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

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

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

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

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