我正在尝试创建一个将通过侏罗纪 JavaScript 引擎向 JavaScript 公开的 .NET 类。该类表示一个 HTTP 响应对象。由于 HTTP 响应可能有多个具有相同名称的标头,因此我想包含一个方法,该方法返回具有特定名称的标头的 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?