使用 Xamarin WorklightResourceRequestAndroid API 时,我们如何将 cookie 插入到 MobileFirst 请求中?

How can we insert cookies into the MobileFirst request when using the Xamarin WorklightResourceRequestAndroid API?

我们正在开发一个 MobileFirst 项目,使用 Xamarin SDK 构建客户端代码(在此示例中 Android,尽管我们正在寻找涵盖 [=23= 的更通用的解决方案] 也是),我们正在将一些 Java 基于脚本的适配器迁移到 Java。以前,我们使用 C# 代码调用这样的 JavaScript 适配器,以便将 cookie 插入到请求中(这些是为了呈现给 ISAM,尽管这主要是偶然的)。

var wlClient = WorklightClient.NativeObject as WLClient;
var cookie = new BasicClientCookie(name, value) { Path = path, Domain = domain, };
wlClient.CookieStore.AddCookie(cookie);

var connectResponse = await wlConnect.Connect();    
var invocationData = new WorklightProcedureInvocationData("CP4BackendJavaScript", "cp4Test", new object[0]);    
var responseAsProcedure = await wlClient.InvokeProcedure(invocationData);

鉴于我们正在迁移到基于 Java 的适配器,我们需要切换到 the ResourceRequest style 调用。

但是,这似乎没有为我们提供将 cookie 插入请求的方法,因为我们正在使用的 WorklightResourceRequestAndroid 对象未链接到我们之前使用的 wlClient:

var uri = new Uri(_worklightClient.ServerUrl + "/adapters/CP4BackendJavaScript/cp4Test");
var request = new WorklightResourceRequestAndroid(uri, "GET");
var responseAsResource = await request.Send();

我们如何将已知的 cookies 插入到这个请求中?

连接问题:WorklightResourceRequestAndroid Class 来自基础 Worklight.Xamarin.Android 实现。这可能在也可能不在连接的 wlClient 对象上,具体取决于您如何获得它。理想情况下,您不必访问底层 OS 特定的提供程序,而是留在共享名称空间 Worklight。例如:

Worklight.WorklightResourceRequest .

您可以从 IWorklightClient.ResourceRequest(..) 中获取。 IWorklightClient 对象是您应该在 Android activity class 中实例化的对象,例如:

IWorklightClient wlClient= Worklight.Xamarin.Android.WorklightClient.CreateInstance (this);

回答您的 cookie 问题:资源请求的基础 Android/iOS impl 没有 cookie 方法 - 因此它们也不在 Xamarin 层中。

好的,根据 Ajay 的建议,答案似乎是使用静态实例代码来插入 cookie:

var wlClient = WorklightClient.NativeObject as WLClient;
var cookie = new BasicClientCookie(name, value) { Path = path, Domain = domain, };
wlClient.CookieStore.AddCookie(cookie);

然后我们可以创建一个实例并基于它发出请求,这会自动插入 cookies:

var _worklightClient = WorklightClient.CreateInstance(activity)
var uri = new Uri(_worklightClient.ServerUrl + '/adapters/CP4BackendJavaScript/cp4Test");
var request = _worklightClient.ResourceRequest(uri, "GET");
var responseResource = await request.Send();