Я знаю на стороне клиента (javascript), вы можете использовать windows.location.hash, но не могли найти доступа к серверу со стороны.
Как получить Url Hash (#) со стороны сервера
Ответ 1
У нас была ситуация, когда нам нужно было сохранить хэш URL-адресов через обратную связь ASP.Net. Поскольку браузер не отправляет хэш на сервер по умолчанию, единственный способ сделать это - использовать Javascript:
-
Когда форма отправляется, возьмите хэш (
window.location.hash
) и сохраните его в скрытом поле ввода на стороне сервера. Поместите это в DIV с идентификатором "urlhash
", чтобы мы могли легко найти его позже. -
На сервере вы можете использовать это значение, если вам нужно что-то сделать с ним. Вы даже можете изменить его, если вам нужно.
-
На странице на клиенте проверьте значение этого скрытого поля. Вы захотите найти его в DIV, в котором он содержится, поскольку автогенерированный идентификатор не будет известен. Да, вы могли бы сделать некоторые хитрости здесь с .ClientID, но нам было проще просто использовать оболочку DIV, поскольку она позволяет всему этому Javascript жить во внешнем файле и использоваться в общем виде.
-
Если скрытое поле ввода имеет допустимое значение, установите его как хэш 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()
соответственно, конечно.
Ответ 2
RFC 2396 раздел 4.1:
Когда ссылка URI используется для выполнения поискового действия на идентифицированный ресурс, необязательный идентификатор фрагмента, отделенный от URI символом перекрестного штриха ( "#" ) состоит из дополнительного эталонная информация должна интерпретироваться пользовательским агентом после поисковое действие успешно завершено. Таким образом, это не часть URI, но часто используется в сочетании с URI.
(выделено курсивом)
Ответ 3
Это потому, что браузер не передает эту часть на сервер, извините.
Ответ 4
Вероятно, единственный выбор - прочитать его на стороне клиента и перенести его вручную на сервер (GET/POST/AJAX). С уважением Артур
Вы также можете увидеть, как играть с помощью кнопки "Назад" и истории браузера в Malcan
Ответ 5
Просто, чтобы исключить возможность того, что вы на самом деле не пытаетесь увидеть фрагмент в GET/POST и на самом деле хотите узнать, как получить доступ к той части объекта URI, которая у вас есть в вашем серверном коде, она находится под Uri.Fragment(Документы MSDN).
Ответ 6
Возможное решение для запросов GET:
Новый формат ссылки: http://example.com/yourDirectory?hash=video01
Вызовите эту функцию к верхней части контроллера или 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");
}
}