Недавно я разработал метод обработки 401, который, я думаю, будет работать и для вас. Проблема в предыдущих версиях .NET состояла в том, что страницы ошибок не возвращали правильный код ошибки, они просто 302 на указанную страницу.
В .NET 3.5 ваш обработчик ошибок может «переписать» вместо «перенаправления» с помощью redirectMode:
<customErrors mode="On" defaultRedirect="/err.aspx" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="/404.aspx"/>
</customErrors>
Поскольку все запросы (включая вызовы веб-службы) теперь возвращают правильный код состояния HTTP, вы можете правильно использовать код 404/401/500 в своем JavaScript.
Затем, в вашем клиентском коде (это в jQuery и перенаправляет на любые ошибки, не только 401, но вы поняли):
$(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
window.location.href('/error.aspx');
});