我正在寻找一种方法来使用ServiceStack ServerEventsClient的现有会话ID。我想使用服务器事件,但访问权限仅限于经过身份验证的用户。
对于JsonServiceClient,我在所有项目引用的库中都有一个方法,它返回一个可以使用的经过身份验证的JsonServiceClient。目的是通过将所有身份验证信息保存在一个位置来加快开发速度:
public static JsonServiceClient GetAuthenticatedServiceClient()
{
var ServiceClient = new JsonServiceClient(globals.ApiUrl)
{
RequestFilter = request => request.UserAgent = globals.ClientSoftware.ToString()
};
var CookieQuery = (from c in globals.AuthCookieContainer
where c.Name == "ss-id"
where c.Expires > DateTime.Now
select c);
if (CookieQuery.Count() > 0)
{
ServiceClient.CookieContainer.Add(CookieQuery.FirstOrDefault());
}
else
{
throw new Exceptions.ApiNotAuthenticatedException();
}
return ServiceClient;
}
我的问题是:有没有办法为ServerEventsClient实现类似于上述方法的东西?我试图避免发送身份验证请求,因为我已经有了一种简单的方法来获取客户端上的会话信息。
答案 0 :(得分:2)
用于维护每个ServerEvents请求的CookieContainer的ServerEventsClient.ServiceClient仅为JsonServiceClient
,因此您可以通过以下方式访问其具体类型:
var client = (JsonServiceClient)serverEventsClient.ServiceClient;
因此,您可以采用相同的方法在任何服务客户端之间传输cookie。
ServerEventsClient.Authenticate只是在同一个ServerEventsClient.ServiceClient实例上发出Authenticate
请求,因此它会使用成功响应中返回的cookie进行填充。