Eu sei que no lado do cliente (javascript) você pode usar o windows.location.hash, mas não conseguiu encontrar o acesso do lado do servidor.
Eu sei que no lado do cliente (javascript) você pode usar o windows.location.hash, mas não conseguiu encontrar o acesso do lado do servidor.
Respostas:
Tivemos uma situação em que precisávamos persistir o hash da URL nas postagens do ASP.Net. Como o navegador não envia o hash para o servidor por padrão, a única maneira de fazer isso é usar algum Javascript:
Quando o formulário for enviado, pegue o hash ( window.location.hash
) e armazene-o em um campo de entrada oculto do servidor Coloque isso em um DIV com o ID " urlhash
" para que possamos encontrá-lo facilmente mais tarde.
No servidor, você pode usar esse valor se precisar fazer algo com ele. Você pode até mudar se precisar.
No carregamento da página no cliente , verifique o valor deste campo oculto. Você deseja encontrá-lo pelo DIV em que está contido, pois o ID gerado automaticamente não será conhecido. Sim, você pode fazer alguns truques aqui com .ClientID, mas achamos mais simples usar o DIV do wrapper, pois permite que todo esse Javascript viva em um arquivo externo e seja usado de maneira genérica.
Se o campo de entrada oculto tiver um valor válido, configure-o como o URL hash ( window.location.hash again
) e / ou execute outras ações.
Usamos o jQuery para simplificar a seleção do campo, etc ... tudo isso acaba sendo algumas chamadas ao jQuery, uma para salvar o valor e outra para restaurá-lo.
Antes de enviar:
$("form").submit(function() {
$("input", "#urlhash").val(window.location.hash);
});
No carregamento da página:
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
window.location.hash = hashVal;
}
IsHashValid()
pode verificar " undefined
" ou outras coisas com as quais não deseja lidar.
Além disso, certifique-se de usar $(document).ready()
adequadamente, é claro.
Seção 4.1 da RFC 2396 :
Quando uma referência de URI é usada para executar uma ação de recuperação no recurso identificado, o identificador de fragmento opcional, separado do URI por um caractere de hachura ("#"), consiste em informações de referência adicionais a serem interpretadas pelo agente do usuário após a recuperação ação foi concluída com êxito . Como tal, não faz parte de um URI, mas é frequentemente usado em conjunto com um URI.
(enfase adicionada)
Isso ocorre porque o navegador não transmite essa parte ao servidor, desculpe.
Provavelmente, a única opção é lê-lo no lado do cliente e transferi-lo manualmente para o servidor (GET / POST / AJAX). Atenciosamente Artur
Você também pode ver como jogar com o botão voltar e o histórico do navegador em Malcan
Apenas para descartar a possibilidade de você não estar realmente tentando ver o fragmento em um GET / POST e realmente querer saber como acessar a parte de um objeto URI que você possui no código do servidor, ele está em Uri.Fragment ( Documentos do MSDN ).
Solução possível para solicitações GET:
Novo formato de link: http://example.com/yourDirectory?hash=video01
Chame esta função na parte superior do controlador ou 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");
}
}