[英]Azure Mobile Service javascript SDK does not work in Firefox
我有一個用C#編寫的簡單Azure Mobile Service后端,它在/api/CustomLogin
有一個登錄功能。 以下函數是我在Javascript中為我的Web應用程序進行的簡單登錄測試,它可以訪問這些數據:
var client = new WindowsAzure.MobileServiceClient(
URL,
API_KEY
);
function tryLogin(username, password) {
client.invokeApi("CustomLogin", {
body: {
username: username,
password: password
},
method: "post"
}).done(function (results) {
alert(JSON.stringify(results));
}, function (err) {
alert("Error: " + err);
});
}
這適用於Chrome 37和Internet Explorer 11,並返回具有正確狀態代碼和身份驗證令牌的JSON對象。 但是,當我在Firefox 32上運行此測試時,它返回一個空對象{}
,這意味着我沒有收到用戶信息。 我使用的是來自http://ajax.aspnetcdn.com/ajax/mobileservices/MobileServices.Web-1.2.2.min.js的Azure移動服務SDK。
我已經在localhost和已部署的網頁(也在Azure網站上托管)上使用http和https(由Azure提供)測試了這一點,這適用於Chrome和Internet Explorer,但不適用於Firefox。
例如,Mobile Service API中的其他功能可以在Firefox中運行
var peopleTable = client.getTable('people');
var query = peopleTable.read().done(function (results) {
alert(JSON.stringify(results));
}, function (err) {
alert("Error: " + err);
});
這讓我懷疑invokeApi
存在問題,但我無法理解為什么這個問題只發生在Firefox中。
這里的問題是,在.NET后端,您默認啟用了內容協商 - 客戶端可以向服務詢問它“更喜歡”響應的內容類型(通過Accept
標頭)。 在大多數瀏覽器中,客戶端請求會說它“接受”所有內容,而.NET后端中使用的“首選”格式化程序是將對象轉換為線路上的JSON的格式化程序。
但是,Firefox會發送一個Accept
標頭,表示它更喜歡接收XML 。 后端很樂意,您的API調用將接收服務發送的XML響應。 您甚至可以查看responseText
屬性並在那里查看它。
function tryLogin(username, password) {
client.invokeApi("CustomLogin", {
body: {
username: username,
password: password
},
method: "post"
}).done(function (response) {
alert(response.responseText);
}, function (err) {
alert("Error: " + err);
});
}
現在,如果您不想處理XML(我不會責怪您),您有兩個選擇:在服務器端,從服務器所具有的格式化程序列表中刪除XML格式化程序。 在WebApiConfig上,這一行應該可以解決問題:
config.Formatters.Remove(config.Formatters.XmlFormatter);
或者你可以通過在調用API時直接傳遞它來覆蓋firefox發送的Accept標頭:
function tryLogin(username, password) {
client.invokeApi("CustomLogin", {
body: {
username: username,
password: password
},
method: "post",
headers: { Accept: 'application/json' }
}).done(function (response) {
alert(JSON.stringify(response.result));
}, function (err) {
alert("Error: " + err);
});
}
完成后,您將在成功回調的參數的result
屬性中獲得API的result
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.