[asp.net] 서버 측에서 URL 해시 (#)를 얻는 방법

클라이언트 측 (javascript)에서 windows.location.hash를 사용할 수 있지만 서버 측에서 액세스 할 수는 없습니다.



답변

ASP.Net 포스트 백에서 URL 해시를 유지해야하는 상황이있었습니다. 브라우저는 기본적으로 해시를 서버로 보내지 않으므로이를 수행하는 유일한 방법은 일부 Javascript를 사용하는 것입니다.

  1. 양식이 제출되면 해시 ( window.location.hash)를 잡고 서버 측 숨겨진 입력 필드에 저장 ID를 ” urlhash” 로 DIV에 저장하여 나중에 쉽게 찾을 수 있도록하십시오.

  2. 서버 에서이 값을 사용해야 할 경우이 값을 사용할 수 있습니다. 필요한 경우 변경할 수도 있습니다.

  3. 클라이언트의 페이지로드 시이 숨겨진 필드의 값을 확인하십시오. 자동 생성 된 ID를 알 수 없으므로 포함 된 DIV에서 찾을 수 있습니다. 예, .ClientID로 약간의 속임수를 쓸 수는 있지만 래퍼 DIV를 사용하는 것이 더 간단하다는 것을 알았습니다.이 모든 Javascript가 외부 파일에 살고 일반적인 방식으로 사용될 수 있기 때문입니다.

  4. 숨겨진 입력 필드에 유효한 값이 있으면 해당 값을 URL 해시 ( window.location.hash again) 로 설정 하거나 다른 조치를 수행하십시오.

우리는 필드 선택 등을 단순화하기 위해 jQuery를 사용했습니다. 모두 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()물론 적절하게 사용하십시오 .


답변

RFC 2396 섹션 4.1 :

URI 참조가 식별 된 자원에서 검색 조치를 수행하는 데 사용되는 경우, 크로스 해치 ( “#”) 문자로 URI와 분리 된 선택적 단편 ID 는 검색 후 사용자 에이전트가 해석 할 추가 참조 정보 구성됩니다. 작업이 성공적으로 완료되었습니다 . 따라서 URI의 일부는 아니지만 종종 URI와 함께 사용됩니다.

(강조 추가)


답변

브라우저가 해당 부분을 서버로 전송하지 않기 때문입니다. 죄송합니다.


답변

아마도 유일한 선택은 클라이언트 쪽에서 읽고 서버로 수동 전송하는 것입니다 (GET / POST / AJAX). Artur 감사합니다

Malcan에서 뒤로 버튼과 브라우저 기록으로 재생하는 방법도 볼 수 있습니다


답변

실제로 GET / POST에서 프래그먼트를 보려고 시도하지 않고 실제로 서버 측 코드 내에있는 URI 객체의 해당 부분에 액세스하는 방법을 알고 싶을 가능성을 배제하기 위해 Uri.Fragment에 있습니다. ( MSDN 문서 ).


답변

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");
    }
}


답변