Cómo obtener Url Hash (#) del lado del servidor

Sé por el lado del cliente (javascript) que puede usar windows.location.hash pero no pudo encontrar de todos modos para acceder desde el lado del servidor.

Tuvimos una situación en la que necesitábamos mantener el hash de URL en las publicaciones posteriores de ASP.Net. Como el navegador no envía el hash al servidor de manera predeterminada, la única forma de hacerlo es usar algo de Javascript:

  1. Cuando se envíe el formulario, tome el hash ( window.location.hash ) y guárdelo en un campo de entrada oculto del lado del servidor. Ponga esto en un DIV con un id de ” urlhash ” para que podamos encontrarlo fácilmente más tarde.

  2. En el servidor puede usar este valor si necesita hacer algo con él. Incluso puede cambiarlo si lo necesita.

  3. En la carga de la página en el cliente , verifique el valor de este este campo oculto. Deseará encontrarlo en el DIV que contiene, ya que no se conocerá el ID generado automáticamente. Sí, podría hacer algún truco aquí con .ClientID pero nos pareció más simple usar el envoltorio DIV, ya que permite que todo este Javascript viva en un archivo externo y se use de forma genérica.

  4. Si el campo de entrada oculto tiene un valor válido, configúrelo como el URL hash ( window.location.hash again ) y / o realice otras acciones.

Usamos jQuery para simplificar la selección del campo, etc … en definitiva, termina siendo unas pocas llamadas jQuery, una para guardar el valor y otra para restaurarla.

Antes de enviar:

 $("form").submit(function() { $("input", "#urlhash").val(window.location.hash); }); 

En la carga de la página:

 var hashVal = $("input", "#urlhash").val(); if (IsHashValid(hashVal)) { window.location.hash = hashVal; } 

IsHashValid() puede buscar ” undefined ” u otras cosas que no desea manejar.

Además, asegúrese de usar $(document).ready() apropiadamente, por supuesto.

RFC 2396 sección 4.1:

Cuando se usa una referencia URI para realizar una acción de recuperación en el recurso identificado, el identificador de fragmento opcional, separado del URI por un carácter de sombreado cruzado (“#”), consiste en información de referencia adicional para ser interpretada por el agente usuario después de la recuperación la acción se ha completado con éxito . Como tal, no es parte de un URI, pero a menudo se usa junto con un URI.

(énfasis añadido)

Eso es porque el navegador no transmite esa parte al servidor, lo siento.

Probablemente la única opción es leerlo en el lado del cliente y transferirlo manualmente al servidor (GET / POST / AJAX). Recuerdos Artur

También puede ver cómo jugar con el botón Atrás y el historial del navegador en Malcan

Solo para descartar la posibilidad de que realmente no intente ver el fragmento en un GET / POST y realmente quiera saber cómo acceder a esa parte de un objeto URI que tiene dentro de su código del lado del servidor, está bajo Uri.Fragment ( Documentos de MSDN ).

Posible solución para solicitudes GET:

Nuevo formato de enlace: http://example.com/yourDirectory?hash=video01

Llame a esta función hacia la parte superior del controlador o 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"); } }