После того, как я покопался, потому что я не нашел ответов, и это раздражало меня достаточно, чтобы пройтись по коду, я нашел ответ.
Как оказалось, я был не прав. Где мы звоним FormsAuthentication.RedirectFromLoginPage
- это мертвый код, и перенаправление обрабатывается на стороне клиента после того, как служба аутентификации сообщает нам, что попытка была успешной.
Это был кусок кода, который не работал:
var queryStringParts = window.location.search.split('=');
var targetPath = queryStringParts[1];
targetPath = targetPath.replace(/(%2f)/g,'/'); // <-- Here's where we weren't doing enough
С тех пор я написал служебный метод для получения значения строки запроса и его правильной обработки.
function getQueryStringValue(name, defaultValue) {
var value = defaultValue;
var queryString = window.location.search;
var startPos = queryString.indexOf(name);
if (startPos > -1) {
startPos += name.length + 1
var endPos = queryString.indexOf('&', startPos);
if (endPos == -1) {
// Incase there is no ampersand (&) after the query string value
// we're after we go to the last index + 1
endPos = queryString.length;
}
value = unescape(queryString.substring(startPos, endPos));
}
return value;
}