使用 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();
我们正在开发一个 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();