Comment obtenir le hachage URL (#) du côté serveur

Je sais que du côté du client (javascript), vous pouvez utiliser windows.location.hash, mais vous n’avez pas pu trouver d’access du côté du serveur.

Nous avions besoin de conserver le hachage d’URL dans les publications ASP.Net. Comme le navigateur n’envoie pas le hachage au serveur par défaut, la seule façon de le faire est d’utiliser du Javascript:

  1. Lorsque le formulaire est soumis, récupérez le hachage ( window.location.hash ) et stockez-le dans un champ d’entrée caché côté serveur. Placez-le dans un DIV avec un identifiant ” urlhash ” pour pouvoir le retrouver plus tard.

  2. Sur le serveur, vous pouvez utiliser cette valeur si vous devez faire quelque chose. Vous pouvez même le changer si vous en avez besoin.

  3. Sur le chargement de la page sur le client , vérifiez la valeur de ce champ masqué. Vous voudrez le trouver par le DIV qu’il contient car l’ID généré automatiquement ne sera pas connu. Oui, vous pouvez faire quelques trucs ici avec .ClientID mais nous avons trouvé plus simple d’utiliser simplement le wrapper DIV car il permet à tout ce Javascript de vivre dans un fichier externe et d’être utilisé de manière générique.

  4. Si la zone de saisie masquée a une valeur valide, définissez-la comme étant le hachage d’URL ( window.location.hash again ) et / ou effectuez d’autres actions.

Nous avons utilisé jQuery pour simplifier la sélection du champ, etc. Tout compte fait, il s’agit de quelques appels jQuery, un pour enregistrer la valeur et un autre pour le restaurer.

Avant de soumettre:

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

Chargement de la page:

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

IsHashValid() peut vérifier ” undefined ” ou d’autres choses que vous ne voulez pas gérer.

De plus, assurez-vous bien d’utiliser $(document).ready() , bien sûr.

RFC 2396 section 4.1:

Lorsqu’une référence URI est utilisée pour effectuer une action de récupération sur la ressource identifiée, l’identificateur de fragment facultatif, séparé de l’URI par un caractère hachuré (“#”), consiste en informations de référence supplémentaires à interpréter par l’agent utilisateur après la récupération. l’action a été complétée avec succès . En tant que tel, il ne fait pas partie d’un URI, mais est souvent utilisé avec un URI.

(soulignement ajouté)

C’est parce que le navigateur ne transmet pas cette partie au serveur, désolé.

Le seul choix est probablement de le lire côté client et de le transférer manuellement sur le serveur (GET / POST / AJAX). Regards Artur

Vous pouvez également voir comment jouer avec le bouton de retour et l’historique du navigateur chez Malcan

Juste pour écarter la possibilité que vous n’essayiez pas réellement de voir le fragment sur un GET / POST et que vous vouliez réellement savoir comment accéder à la partie d’un object URI que vous avez dans votre code côté serveur, c’est sous Uri.Fragment ( MSDN docs ).

Solution possible pour les demandes GET:

Nouveau format de lien: http://example.com/yourDirectory?hash=video01

Appelez cette fonction vers le haut du contrôleur ou sur http://example.com/yourDirectory/index.php :

 function redirect() { if (!empty($_GET['hash'])) { /** Sanitize & Validate $_GET['hash'] If valid return ssortingng If invalid: return empty or false ******************************************************/ $validHash = sanitizeAndValidateHashFunction($_GET['hash']); if (!empty($validHash)) { $url = './#' . $validHash; } else { $url = '/your404page.php'; } header("Location: $url"); } }