2014-04-08 73 views
0

我無法從Random.org獲取一個數字。我遵循他們的API,並且我相信我已經正確構建了請求。下面是請求代碼:在MVC中使用AJAX與Random.org 4

self.GetResults = function() { 
      $.ajax({ 
       url: 'https://api.random.org/json-rpc/1/invoke', 
       dataType: "json", 
       contentType: "application/json-rpc; charset=utf-8", 
       type: 'POST', 
       data: { 
        "jsonrpc": "2.0", 
        "method": "generateIntegers", 
        "params": { 
         "apiKey": "Get-a-free-one-at-the-site", 
         "n": 1, 
         "min": 1, 
         "max": 20 
        }, 
        "id": 1 
       } 

      }) 
      .done(function (data, status, request) 
      { 
       alert("Success! " + data[0]); 
      }) 
      .fail(function (request, status, error) 
      { 
       alert("Failed " + error); 
      }); 
     } 

我遇到的問題如下:

  1. 如果我不包括contentType: "application/json; charset=utf-8"則默認類型爲"application/x-www-form-urlencoded; charset=UTF-8",每jQuery的API文檔。 Random.org在他們的API中聲明他們需要JSON請求(application/json-rpc專用,但application/json可以接受)。因此,我得到一個解析錯誤的迴應。
  2. 如果我確實包含上面提到的內容類型,我會收到錯誤消息:「請求標頭字段Content-Type不被Access-Control-Allow-Headers所允許」。

我試圖將代碼添加到web.config中允許請求頭如下:

<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" /> 
    </customHeaders> 
</httpProtocol> 

從這個帖子https://stackoverflow.com/a/12413863/981202,但有沒有運氣。

我也嘗試修改在Global.asax如下:

protected void Application_PreSendRequestHeaders(object sender, EventArgs e) 
{ 
    HttpContext.Current.Response.Headers.Remove("Access-Control-Allow-Headers"); 
} 

作爲另一堆棧溢出後(我沒有鏈接),但似乎並沒有要麼做。爲了清楚起見,我將這個函數放在Application_Start()函數之後。

您可能想知道爲什麼我不使用Random類。原因是因爲我想使用Random.org,如果沒有別的作爲練習。如果存在這個問題,我希望找到解決方案。以前,我在這裏有一些數據,表明C#Random類沒有做得很好,但我得到了更正,因此數據已被刪除。是的,隨機類是一個選項,但正如我所提到的,我想找到解決這個問題的辦法。

+0

你能鏈接到你在random.org上閱讀的文檔嗎?我正在查看http://www.random.org/clients/http/,並根據我在那裏看到的內容,只需要請求以下URL:http://www.random.org /整數/?NUM = 1&分鐘= 1&最大= 20&COL = 1&基= 10&格式=平原&RND =新。另外,即使System.Random不是真正的隨機數據,在成千上萬的試驗中,您會看到比這更好的分佈。 – pmcoltrane

+0

你能展示你實現C#隨機類的地方嗎?使用相同的數據,運行我自己的測試會產生比您更直的線。 – Jonesopolis

+0

@ pmcoltrane:我正在閱讀的Random.org文檔在這裏:https://api.random.org/json-rpc/1/具體在這裏:https://api.random.org/json-rpc/1 /介紹和這裏(在generateIntegers下:https://api.random.org/json-rpc/1/basic – admiral142

回答

0
<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" /> 
    </customHeaders> 
</httpProtocol> 

我已將此代碼添加到我的web.config。起初,我把它放在<configuration>節點中,它不起作用。然後我意識到它應該在<system.webServer>之內,這也在<configuration>節點內。一旦我把它放在那裏就行了,我沒有再次收到提到的錯誤。