2014-11-25 54 views
1

我正在尝试使用XmlProviderFSharp.Data,我遇到了一个较小的问题。我正在处理的API需要发送包含AcceptAccept-Language的HTTP标头。现在,如果我这样做..F#XmlProvider和HTTP头

let afRequestString url = 
     Http.RequestString(
      url, 
      httpMethod="GET", 
      headers = [ Accept HttpContentTypes.Xml; AcceptLanguage "sv-se,sv" ]) 

这将做工精细,可惜我不能直接与这样type foo = XmlProvider<afRequestString "bar">的XmlProvider使这项工作,这将不工作,要么:

let foo = afRequestString "bar" 
type bar = XmlProvider<foo> 

的来自编译器的抱怨是提供给XmlProviderSample必须是静态的和常量的,这对我来说有点奇怪,因为根据我的理解,let-bindings是不可变的,所以它们本质上是不变的。 总之,将工作,我发现的唯一的事情是做什么的这样

File.WriteAllText("foo.xml", afRequestString "foo") |> ignore 
type bar = XmlProvider<"foo.xml"> 

但这真的好像这样做的过于复杂的方式。有没有更简单的方法来做到这一点?

回答

2

使用XML类型提供程序(和其他类型的提供程序)时,必须在编译时知道示例。这意味着你不能使用某些(或多或少复杂的调用)结果的值。

如果您需要指定类似标题的东西来获取示例,那么最好的选择是首先获取示例文件(以某种方式)并将其保存到本地文件中(或者您可以将文件作为你的构建脚本,如果你总是想要一个最新版本)。

XmlProvider具有a couple of parameters指定如何得到样品,我怀疑,添加更多配置HTTP请求是合理的,但在保存文件在本地通常就足够好了......

+0

没错,这就是我最终做了。只是想知道是否有更简单的方法来做到这一点。但后来我有了正确的想法,非常感谢! – 2014-11-25 14:35:55

+2

另一种选择是将PR提交给F#数据并添加此功能:) – 2014-11-25 14:38:21