我正在開發Azure MobileService/CordovaApp設置。該服務器在本地運行,並具有以下設置啓用CORS:調試MobileServiceClient請求
<add name="Access-Control-Allow-Origin" value="*" />
API可以通過使用瀏覽器的地址被稱爲像
http://localhost:59477/api/item/explore/A/B
客戶端腳本正試圖描繪這個調用如下:
var client = new WindowsAzure.MobileServiceClient('http://localhost:59477/', 'http://localhost:59477/', '');
GetItems.addEventListener("click",
function()
{
client.invokeApi("item/explore/A/B",
{
method: "get"
})
.done(
function (results)
{
alert(results.result.count);
},
function (error)
{
var xhr = error.request;
alert('Error - status code: ' + xhr.status + '; body: ' + xhr.responseText);
alert(error.message);
}
);
}
);
我得到的是狀態405 - 不允許的方法,這一點我不明白,原因有二:
- 調用服務行動裝飾用[HTTPGET]屬性
- 的響應頭好像說GET是好的:
HTTP/1.1 405 Method Not Allowed Allow: GET Content-Length: 76 Content-Type: application/json; charset=utf-8 Server: Microsoft-IIS/8.0 X-SourceFiles: =?UTF-8?B?RjpcQ29kZVxGb290UHJpbnRzXGZvb3RwcmludHMuU2VydmVyXEZvb3RwcmludHNTZXJ2aWNlXGFwaVxmb290cHJpbnRcZXhwbG9yZVw1MS4yNzcwMjJcNy4wNDA3ODM=?= X-Powered-By: ASP.NET Access-Control-Allow-Origin: * Date: Sat, 15 Aug 2015 18:08:30 GMT
任何想法,我能做些什麼來得到這個運行?
編輯 的原始請求表明,由傑里米·福斯特已經預計,客戶端發送的類型選項的請求:
OPTIONS http://localhost:59477/api/fp/get?id=1 HTTP/1.1 Host: localhost:59477 Connection: keep-alive Access-Control-Request-Method: GET Origin: http://localhost:4400 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 Access-Control-Request-Headers: accept, x-zumo-features, x-zumo-installation-id, x-zumo-version Accept: */* Referer: http://localhost:4400/index.html Accept-Encoding: gzip, deflate, sdch Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
我設法支持這一請求應用[HttpOptions]
屬性爲我的行動方法。現在我得到一個或多或少有效的迴應:
HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Content-Encoding: gzip Vary: Accept-Encoding Server: Microsoft-IIS/8.0 X-SourceFiles: =?UTF-8?B?RjpcQ29kZVxGb290UHJpbnRzXGZvb3RwcmludHMuU2VydmVyXEZvb3RwcmludHNTZXJ2aWNlXGFwaVxmcFxnZXRcMQ==?= X-Powered-By: ASP.NET Access-Control-Allow-Origin: * Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept Date: Sun, 23 Aug 2015 19:34:21 GMT Content-Length: 234 ...
至少這就是小提琴手告訴我的。該AzureMobileServiceClient拋出另一個問題,這大致可以翻譯爲:
Cross-Origin request blocked, missing token 'x-zumo-installation-id' in CORS header row 'Access-Control-Allow-Headers' on CORS-Preflight-Channel
我不確定這是客戶發出OPTIONS請求的錯誤行爲。我猜它實際上是有意的。可能來自OPTIONS請求的錯誤響應優於失敗的GET請求,因此客戶端首先作爲一種「ping」發出OPTIONS。只是一個猜測。在文檔中找不到任何東西(這讓我懷疑)。我正在與一些人覈對。 –