我正在使用Http类型的FSharpData。
type Http private() =
......
static member Request(url, ?query, ?headers, ?meth, ?body, ?cookies, ?cookieContainer, ?certificate) =
......
但是,我需要扩展静态memeber Request
来处理cookie。我不能继承该类,因为它的构造函数是私有的。
type Web () =
inherit Http() // Error
override Request
let ObSSOCookie = new Cookie()
......
或者我必须创建一个具有调用静态成员函数的函数的模块?该模块的名称是Http
吗?
答案 0 :(得分:5)
Http
类型是一个静态类,因为它是无状态的,所以继承它是没有意义的。如果您想使用Cookie并在请求中维护它们,您只需创建一个CookieContainer
并在请求中重复使用它:
let cc = CookieContainer()
Http.RequestString("url1", cookieContainer = cc)
Http.RequestString("url2", cookieContainer = cc)
如果你真的想,你可以像这样为它创建一个包装器:
type HttpWithState() =
let cookies = CookieContainer()
static member RequestString(url, ?params, ?headers, ...) =
Http.RequestString(url, ?params = params, ?headers = headers, ..., cookieContainer = cookies)
然后像这样使用它:
let http = HttpWithState()
http.RequestString("url1")
http.RequestString("url2")
但是直接使用Http
类型
答案 1 :(得分:2)
我不相信你可以从这个类继承 - 这可能是一个设计决定。
但是,该类型的完整路径是
FSharp.Net.Http
所以你可以在
之类的东西中创建自己的类型A.B.Http
可以调用原始http
函数并通过该方法提供覆盖。
答案 2 :(得分:2)
如果不需要访问privates,可以尝试向Http
类添加静态扩展方法:
type FSharp.Net.Http with
static member RequestWithCookies(...) = ...