Я знаю на стороне клиента (javascript), вы можете использовать windows.location.hash, но не могли найти доступа к серверу со стороны.
Как получить Url Hash (#) со стороны сервера
Ответ 1
У нас была ситуация, когда нам нужно было сохранить хэш URL-адресов через обратную связь ASP.Net. Поскольку браузер не отправляет хэш на сервер по умолчанию, единственный способ сделать это - использовать Javascript:
-  Когда форма отправляется, возьмите хэш ( window.location.hash) и сохраните его в скрытом поле ввода на стороне сервера. Поместите это в DIV с идентификатором "urlhash", чтобы мы могли легко найти его позже.
-  На сервере вы можете использовать это значение, если вам нужно что-то сделать с ним. Вы даже можете изменить его, если вам нужно. 
-  На странице на клиенте проверьте значение этого скрытого поля. Вы захотите найти его в DIV, в котором он содержится, поскольку автогенерированный идентификатор не будет известен. Да, вы могли бы сделать некоторые хитрости здесь с .ClientID, но нам было проще просто использовать оболочку DIV, поскольку она позволяет всему этому Javascript жить во внешнем файле и использоваться в общем виде. 
-  Если скрытое поле ввода имеет допустимое значение, установите его как хэш URL ( window.location.hash again) и/или выполните другие действия.
Мы использовали jQuery для упрощения выбора поля и т.д.... в целом он заканчивается несколькими вызовами jQuery, один для сохранения значения, а другой для его восстановления.
Перед отправкой:
$("form").submit(function() {
  $("input", "#urlhash").val(window.location.hash);
});
Загрузка страницы:
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
  window.location.hash = hashVal;
}
 IsHashValid() может проверять "undefined" или другие вещи, которые вы не хотите обрабатывать.
Кроме того, убедитесь, что вы используете $(document).ready() соответственно, конечно.
Ответ 2
RFC 2396 раздел 4.1:
Когда ссылка URI используется для выполнения поискового действия на идентифицированный ресурс, необязательный идентификатор фрагмента, отделенный от URI символом перекрестного штриха ( "#" ) состоит из дополнительного эталонная информация должна интерпретироваться пользовательским агентом после поисковое действие успешно завершено. Таким образом, это не часть URI, но часто используется в сочетании с URI.
(выделено курсивом)
Ответ 3
Это потому, что браузер не передает эту часть на сервер, извините.
Ответ 4
Вероятно, единственный выбор - прочитать его на стороне клиента и перенести его вручную на сервер (GET/POST/AJAX). С уважением Артур
Вы также можете увидеть, как играть с помощью кнопки "Назад" и истории браузера в Malcan
Ответ 5
Просто, чтобы исключить возможность того, что вы на самом деле не пытаетесь увидеть фрагмент в GET/POST и на самом деле хотите узнать, как получить доступ к той части объекта URI, которая у вас есть в вашем серверном коде, она находится под Uri.Fragment(Документы MSDN).
Ответ 6
Возможное решение для запросов GET:
Новый формат ссылки: http://example.com/yourDirectory?hash=video01
Вызовите эту функцию к верхней части контроллера или http://example.com/yourDirectory/index.php:
function redirect()
{
    if (!empty($_GET['hash'])) {
        /** Sanitize & Validate $_GET['hash']
               If valid return string
               If invalid: return empty or false
        ******************************************************/
        $validHash = sanitizeAndValidateHashFunction($_GET['hash']);
        if (!empty($validHash)) {
            $url = './#' . $validHash;
        } else {
            $url = '/your404page.php';
        }
        header("Location: $url");
    }
}
