在激活之前授權的路由時,哪裏是捕獲未授權401的最佳位置。例如,當授權令牌不再有效時,如果用戶嘗試激活路由,則會發生401錯誤。 Durandal中的異常是在activateItem Level中引發的,不知道如何爲它定義一個全局處理程序。durandal路由器激活器捕獲401例外
注意。 mapUnknownRoutes在這種情況下是沒有用的
在激活之前授權的路由時,哪裏是捕獲未授權401的最佳位置。例如,當授權令牌不再有效時,如果用戶嘗試激活路由,則會發生401錯誤。 Durandal中的異常是在activateItem Level中引發的,不知道如何爲它定義一個全局處理程序。durandal路由器激活器捕獲401例外
注意。 mapUnknownRoutes在這種情況下是沒有用的
您可以從任何地方打電話給您的API。如果你正在使用jQuery調用你會處理AJAX調用的與fail
方法失敗 -
$.ajax({
url: url,
data: { start: start, end: end },
success: function(data, textStatus, jqXHR) {
$('#myElement').append(data);
},
error: function(jqXHR, textStatus, errorThrown) {
if (jqXHR.status === '401') {
// do something
}
}
});
這給你的狀態代碼,我不記得,如果它是字符串或INT格式雖然所以這僞代碼明顯
激活器嘗試激活路由時進行呼叫。我同意你的觀點,路由器的工作在檢測到路由有效的那一刻就完成了。這就是爲什麼我試圖找到一個全局處理程序,當一個模塊的激活失敗,因爲401。 – ken
您可以隨時返回一個承諾,路由器將推遲激活完成,直到承諾解決。如果模塊無法加載,並且你不想用你的調用處理失敗,我想你可以嘗試使用像require.js提供的全局失敗處理程序,但我不確定它是否是正確的用例 - http:// requirejs.org/docs/api.html#requirejsonerror –
這需要專門處理我支持授權的每個模塊中的故障。更希望掛鉤到某處的路由器,以提供全局處理。我認爲理想的地方是在連接到路由器的激活器的activeItem中。儘管如此,我並沒有勾引。也有後衛路特但後來發生異常。 – ken
什麼會扔401?如果你在生產中,除非你在調試模式下運行,否則你不應該得到401,如果你使用weyland或grunt或者任何構建工具。 –
如果您不再授權調用api,則.NET中的Web API將拋出401。 – ken
當然,但Durandal的路由器不會打電話給API。您將使用jQuery或其他方式來進行調用,以處理失敗場景。我可以發佈一個例子作爲答案。 –