我無法從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);
});
}
我遇到的問題如下:
- 如果我不包括
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可以接受)。因此,我得到一個解析錯誤的迴應。 - 如果我確實包含上面提到的內容類型,我會收到錯誤消息:「請求標頭字段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類沒有做得很好,但我得到了更正,因此數據已被刪除。是的,隨機類是一個選項,但正如我所提到的,我想找到解決這個問題的辦法。
你能鏈接到你在random.org上閱讀的文檔嗎?我正在查看http://www.random.org/clients/http/,並根據我在那裏看到的內容,只需要請求以下URL:http://www.random.org /整數/?NUM = 1&分鐘= 1&最大= 20&COL = 1&基= 10&格式=平原&RND =新。另外,即使System.Random不是真正的隨機數據,在成千上萬的試驗中,您會看到比這更好的分佈。 – pmcoltrane
你能展示你實現C#隨機類的地方嗎?使用相同的數據,運行我自己的測試會產生比您更直的線。 – Jonesopolis
@ 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