gpt4 book ai didi

javascript - 是否可以将 .NET 对象公开给 JavaScript,该对象具有返回 IEnumerable 的方法?

转载 作者:行者123 更新时间:2023-11-28 04:13:58 25 4
gpt4 key购买 nike

我正在尝试创建一个 .NET 类,该类将通过 Jurassic JavaScript 引擎暴露给 JavaScript。该类表示 HTTP 响应对象。由于 HTTP 响应可能有多个同名 header ,因此我想包含一个方法,该方法返回具有特定名称的 header 的 IEnumerable。

这是我到目前为止所拥有的:

public class JsResponseInstance : ObjectInstance
{
private IDictionary<string, IList<string>> _headers;

public JsResponseInstance(ObjectInstance prototype)
: base(prototype)
{
this.PopulateFunctions();
_headers = new Dictionary<string, IList<string>>();
}

[JSFunction(Name = "addHeader")]
public virtual void addHeader(string name, string value)
{
IList<string> vals;
bool exists = _headers.TryGetValue(name, out vals);
if (!exists)
{
vals = new List<string>();
_headers[name] = vals;
}
vals.Add(value);
}

[JSFunction(Name = "getHeaders")]
public virtual IList<string> getHeaders(string name)
{
IList<string> vals;
bool exists = _headers.TryGetValue(name, out vals);
if (!exists)
{
return new List<string>();
}
return vals;
}
}

当我测试 getHeaders 方法时,我收到 JavascriptException: Unsupported type: System.Collections.Generic.IList'1[System.String]

我尝试将 getHeaders 方法的返回类型从 IList 更改为 string[],并将可选的 IsEnumerable 属性添加到装饰该方法的 JSFunction 属性中。这两个更改都没有什么区别,我仍然看到相同的异常。

有没有办法从暴露给 JavaScript 的 .NET 类中的方法返回 IEnumerable?

最佳答案

Jurassic 的维护者 Paul Bartrum 在 GitHub 上回答了这个问题。

他指出该方法必须返回从 ObjectInstance 派生的类型。由于我们需要一个可枚举的值,因此返回类型应该是 ArrayInstance。

最终的 .NET 代码是:

[JSFunction(Name = "getHeaders")]
public virtual ArrayInstance getHeaders(string name)
{
IList<string> vals;
bool exists = _headers.TryGetValue(name, out vals);
if (!exists)
{
return this.Engine.Array.New();
}
return this.Engine.Array.New(vals.ToArray());
}

关于javascript - 是否可以将 .NET 对象公开给 JavaScript,该对象具有返回 IEnumerable 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46039365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com