Как получить Url Hash (#) со стороны сервера

Я знаю на стороне клиента (javascript), вы можете использовать windows.location.hash, но не могли найти доступа к серверу на любом этапе.

    6 Solutions collect form web for “Как получить Url Hash (#) со стороны сервера”

    У нас была ситуация, когда нам нужно было сохранить hash URL-адресов в почтовых сообщениях ASP.Net. Поскольку браузер не отправляет hash на сервер по умолчанию, единственный способ сделать это – использовать Javascript:

    1. Когда форма отправляется, возьмите hash ( window.location.hash ) и сохраните его в скрытом поле ввода на стороне сервера. Поместите это в DIV с идентификатором « urlhash », чтобы мы могли легко найти его позже.

    2. На сервере вы можете использовать это значение, если вам нужно что-то сделать с ним. Вы можете даже изменить его, если вам нужно.

    3. При загрузке страницы на клиенте проверьте значение этого скрытого поля. Вы захотите найти его в DIV, в котором он содержится, поскольку автогенерированный идентификатор не будет известен. Да, вы могли бы сделать некоторые обманы здесь с .ClientID, но нам было проще просто использовать оболочку DIV, поскольку он позволяет всему этому Javascript жить во внешнем файле и использоваться в общем виде.

    4. Если скрытое поле ввода имеет допустимое значение, установите его как hash 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() .

    RFC 2396 раздел 4.1:

    Когда ссылка URI используется для выполнения поиска по идентифицированному ресурсу, необязательный идентификатор fragmentа, отделенный от URI символом перекрестного штриха («#»), состоит из дополнительной справочной информации, которая будет интерпретироваться пользовательским агентом после извлечения действие было успешно завершено . Таким образом, он не является частью URI, но часто используется в сочетании с URI.

    (выделено мной)

    Это потому, что браузер не передает эту часть на сервер, извините.

    Вероятно, единственный выбор – прочитать его на стороне клиента и перенести его вручную на сервер (GET / POST / AJAX). С уважением Артур

    Вы также можете посмотреть, как играть с кнопкой «Назад» и историей браузера в Malcan

    Просто, чтобы исключить возможность того, что вы на самом деле не пытаетесь увидеть fragment в GET / POST и на самом деле хотите узнать, как получить доступ к той части объекта URI, которая у вас есть в вашем серверном коде, она находится под Uri.Fragment ( Документы MSDN ).

    Возможное решение для запросов GET:

    Новый формат ссылки: http://example.com/yourDirectory?hash=video01

    Вызовите эту функцию в верхней части controllerа или 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"); } } 
    Давайте будем гением компьютера.