Come ottenere Url Hash (#) dal lato server

So che dal lato client (javascript) è ansible utilizzare windows.location.hash ma non è stato ansible trovare comunque l’accesso dal lato server.

Avevamo una situazione in cui era necessario mantenere l’hash dell’URL tra i back di ASP.Net. Poiché il browser non invia l’hash al server per impostazione predefinita, l’unico modo per farlo è usare un po ‘di Javascript:

  1. Quando il modulo viene window.location.hash , prendi l’hash ( window.location.hash ) e memorizzalo in un campo di input nascosto sul lato server. Metti questo in un DIV con un id di ” urlhash ” in modo da poterlo trovare facilmente in seguito.

  2. Sul server è ansible utilizzare questo valore se è necessario fare qualcosa con esso. Puoi persino cambiarlo se necessario.

  3. Al caricamento della pagina sul client , controlla il valore di questo campo nascosto. Dovrai trovarlo tramite il DIV in cui è contenuto poiché l’ID generato automaticamente non sarà noto. Sì, potresti fare qualche trucco qui con .ClientID ma abbiamo trovato più semplice usare il DIV wrapper in quanto permette a tutto questo Javascript di vivere in un file esterno e di essere usato in modo generico.

  4. Se il campo di input nascosto ha un valore valido, window.location.hash again come hash dell’URL ( window.location.hash again ) e / o esegui altre azioni.

Abbiamo usato jQuery per semplificare la selezione del campo, ecc … tutto sumto si tratta di poche chiamate jQuery, una per salvare il valore e un’altra per ripristinarla.

Prima di inviare:

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

A caricamento pagina:

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

IsHashValid() può controllare ” undefined ” o altre cose che non vuoi gestire.

Inoltre, assicurati di usare $(document).ready() appropriato, ovviamente.

RFC 2396 sezione 4.1:

Quando un riferimento URI viene utilizzato per eseguire un’azione di recupero sulla risorsa identificata, l’identificatore di frammento facoltativo, separato dall’URI da un carattere crosshatch (“#”), è costituito da ulteriori informazioni di riferimento che devono essere interpretate dall’utente agente dopo il recupero l’azione è stata completata con successo . In quanto tale, non fa parte di un URI, ma viene spesso utilizzato in combinazione con un URI.

(enfasi aggiunta)

Questo perché il browser non trasmette quella parte al server, mi dispiace.

Probabilmente l’unica scelta è leggerlo sul lato client e trasferirlo manualmente sul server (GET / POST / AJAX). Cordiali saluti, Artur

Potresti vedere anche come giocare con il pulsante Indietro e la cronologia del browser su Malcan

Solo per escludere che tu stia effettivamente cercando di vedere il frammento su un GET / POST e in realtà vuoi sapere come accedere a quella parte di un object URI che hai nel tuo codice lato server, è sotto Uri.Fragment ( Documenti MSDN ).

Possibile soluzione per richieste GET:

Nuovo formato del link: http://example.com/yourDirectory?hash=video01

Chiama questa funzione verso la parte superiore del controller 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"); } }