Ui-router angular com parâmetro de consulta de URL que contém um "ponto"

Em nosso aplicativo Angular, temos que lidar com identificações que contêm um "ponto". Por exemplo:

book = {
  id: '123.456'
}

Temos problemas ao usar IDs como parâmetros de URL. Tudo funciona bem se a navegação ocorrer através de "Angular", ou seja, clicar no link que chama$state.go('bookDetails', {bookId: book.id});. Mas as coisas não funcionam ao recarregar a página

"Não é possível obter /bookDetails?bookId=123.456"

no controlador:

$scope.viewBookDetails = function() {
    $state.go('bookDetails', {bookId: book.id});
}

na vista

<a href="" ng-click="viewBookDetails(); $event.stopPropagation();">

no roteador:

.state('bookDetails', {
    url: '/bookDetails?bookId'
}

no navegador:

https://example.com/bookDetails?bookId=123.456

O link funciona se o "ponto" for substituído por%2E no navegador.

Tentamos substituir "ponto" por "% 2E" no parâmetro para $ state.go ()

$scope.viewBookDetails = function() {
    $state.go('bookDetails', {bookId: book.id.split('.').join('%2E')});
}

mas não funciona porque o "%" é codificado automaticamente e o "ponto" no navegador é substituído por "% 252E"

https://example.com/bookDetails?bookId=123%252E456

questionAnswers(3)

yourAnswerToTheQuestion