2016-01-29 53 views
1

我刚刚开始使用F#并且正在探索FSharp.Data。我正尝试使用www.ncdc.noaa.gov提供的网络服务。第一个问题是ncdc在请求中需要一个令牌。我试图解决与以下:Fsharp.data“路径中的非法字符”

let apiUrl = "http://www.ncdc.noaa.gov/cdo-web/api/v2/data?datasetid=GHCND&locationid=ZIP:28801&startdate=2010-04-01&enddate=2010-04-01" 
    let aRequestString = 
      Http.RequestString(
       apiUrl, 
       httpMethod="GET", 
       headers = [ "token", "mytoken"]) 
    let sf = WeatherData.Load(aRequestString) 

这似乎是工作 - 菲德勒说,我得到的结果看起来不错,我和JSONLint,但我得到“路径中具有非法字符”。来自提供者。

堆栈跟踪显示:

System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) 
System.IO.Path.Combine(String path1, String path2) 
FSharp.Data.Runtime.IO.UriResolver.Resolve(Uri uri) 
FSharp.Data.Runtime.IO.asyncRead(FSharpOption`1 _tp, UriResolver uriResolver, String formatName, String encodingStr, Uri uri) 
[email protected](Uri uri) 
+0

你需要逃避人物或一些这样的? – mydogisbox

+0

我不知道我明白。看起来我从服务中获得有效的JSON。 Load方法抛出,我会逃脱什么?为什么和在哪里? – user1604008

+0

不确定。非法角色只是暗示某处存在未转义角色。 – mydogisbox

回答

2

Load该方法接受URL或文件的路径和从那里加载数据。如果您要自行下载数据,则需要使用Parse方法。

let apiUrl = "http://www.ncdc.noaa.gov/cdo-web/api/v2/data?datasetid=...." 
let aRequestString = 
     Http.RequestString(
      apiUrl, 
      httpMethod="GET", 
      headers = [ "token", "mytoken"]) 
let sf = WeatherData.Parse(aRequestString) 
//     ^^^^^ 
+0

也解决了我的问题。 TomášPetříček - F#的Jon Skeet :) – zmaten

相关问题