2016-01-29 56 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

相關問題