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;
}
也许我的想法有误,但我正在尝试为我们的 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;
}