如何解决将字符串列表传递给 F# asp.Net api
其实我在发帖之前就解决了我的问题,但是不知道有没有更好的解决方案? 另外,如果有什么地方可以按原样使用列表?
如果 F# 需要接受字符串列表作为参数,我正在编写一个简单的 get 端点。
我将该列表作为按预期运行的查询的输入,我并不担心那部分。
我面临的问题如下(最小实现):
当我将端点定义为:
[<HttpGet>]
member _.Get() =
processstrings [ "test"; "test2" ]
它按预期返回。
当我将其更改为:
[<HttpGet>]
member _.Get([<FromQuery>] stringList: string list) = processstrings stringList
InvalidOperationException: 无法创建类型为 'Microsoft.FSharp.Collections.FSharpList`1[[System.String,System.Private.CoreLib,Version=5.0.0.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e]]' 的实例.模型绑定复杂类型不能是抽象类型或值类型,并且必须具有无参数构造函数。记录类型必须有一个主构造函数。或者,给 'stringList' 参数一个非空的默认值。
这对我来说没有多大意义,因为我使用的是字符串列表,在 C# 中至少默认为空列表。
所以我认为这归结为 C# 和 F# 如何解释这些签名,但我不确定如何解决它。
我尝试了这个签名并收到与上面相同的错误....
member _.Get( [<Optional; DefaultParameterValue([||]); FromQuery>] stringList: string list) = processstrings stringList
member _.Get( [<Optional; DefaultParameterValue([||]); FromQuery>] stringList: string seq) = processstrings stringList
我认为它已经解决了,因为 seq 只是 IEnumerable,然后可推测的列表不只是来自 C# 的列表(可变 vs 不可变)。但是有没有办法在 [FromQuery] 参数中使用 F# 列表? [FromBody] 会起作用吗? (否是经过测试的答案)有没有办法为这样的端点添加类型提供程序?
这里还有什么我遗漏的吗?我的现在可以用了,但我很好奇上述内容的含义。
解决方法
我尚未对此进行测试,但我认为 ASP.NET 不支持 F# 列表作为参数。我猜想将参数作为数组将更有可能起作用:
[<HttpGet>]
member _.Get([<FromQuery>] stringList: string[]) =
processStrings (List.ofArray stringList)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。