programing

쿼리 문자열 잘라내기 및 Clean URL C# ASP.net 반환

cafebook 2023. 10. 10. 20:56
반응형

쿼리 문자열 잘라내기 및 Clean URL C# ASP.net 반환

원래 URL을 가져가서 쿼리 문자열 매개 변수를 잘라내고 정리된 버전의 URL을 반환하고 싶습니다. 전체 응용 프로그램에서 발생하므로 global.asax를 통해 수행하는 것이 이상적입니다.그리고 301 리다이렉트도 가능할 것 같습니다.

in: www.website.com/default.aspx?utm_source=twitter&utm_medium=social-media

발송: www.website.com/default.aspx

이를 달성하는 가장 좋은 방법은 무엇입니까?

시스템. 우리는 여기 당신의 친구입니다.유용한 유틸리티가 많이 있지만 원하는 것은 GetLeftPart입니다.

 string url = "http://www.website.com/default.aspx?utm_source=twitter&utm_medium=social-media";
 Uri uri = new Uri(url);
 Console.WriteLine(uri.GetLeftPart(UriPartial.Path));

결과는 다음과 같습니다.

[URI 클래스에서 프로토콜인 http://을(를) 지정해야 합니다.]

GetLeftPart는 기본적으로 "URI의 왼쪽 부분을 내가 지정한 부분까지 포함시켜라"고 말합니다.이것은 스키마(http://bit만), Authority(www.website.com 부분), Path( /default.aspx) 또는 Query(쿼리 문자열)일 수 있습니다.

aspx 웹 페이지에 있는 경우 응답을 사용할 수 있습니다.리다이렉트(newUrl)하여 호출자를 리다이렉트합니다.

여기 간단한 속임수가 있습니다.

Dim uri = New Uri(Request.Url.AbsoluteUri)

dim reqURL = uri.GetLeftPart(UriPartial.Path)

루트 경로와 전체 경로 및 쿼리를 빠르게 가져올 수 있는 방법은 다음과 같습니다.

string path = Request.Url.AbsoluteUri.Replace(Request.Url.PathAndQuery,"");

이것이 조금 더 좋아 보일 수도 있습니다.

    string rawUrl = String.Concat(this.GetApplicationUrl(), Request.RawUrl);

    if (rawUrl.Contains("/post/"))
    {
        bool hasQueryStrings = Request.QueryString.Keys.Count > 1;

        if (hasQueryStrings)
        {
            Uri uri = new Uri(rawUrl);
            rawUrl = uri.GetLeftPart(UriPartial.Path);

            HtmlLink canonical = new HtmlLink();
            canonical.Href = rawUrl;
            canonical.Attributes["rel"] = "canonical";
            Page.Header.Controls.Add(canonical);
        }
    }

이어서 응용 프로그램 URL을 적절하게 가져오는 기능이 있습니다.

완벽하게 작동합니다.

사용자가 예쁜 URL을 보기를 원하기 때문에 이렇게 하고 싶어하는 것으로 추측됩니다.클라이언트가 주소 표시줄의 URL을 "변경"하도록 하는 유일한 방법은 URL을 새 위치로 보내는 것입니다. 즉, URL을 리디렉션해야 합니다.

쿼리 문자열 매개 변수가 페이지 출력에 영향을 미치나요?그러면 쿼리 문자열 매개 변수가 없는 페이지로 리디렉션되는 즉시 쿼리 문자열 매개 변수가 손실되므로 요청 간 상태를 유지하는 방법을 살펴야 합니다.

이 작업을 전체적으로 수행할 수 있는 몇 가지 방법(기본 설정 순서)이 있습니다.

  • 서버 환경을 직접 제어하는 경우 ISAPI_ReWrite 또는 IIS 7.0 URL Rwrite Module과 같이 구성 가능한 서버 모듈을 사용하는 것이 좋습니다.
  • 사용자 정의는 재사용 가능한 롤유어셀프 방식입니다.
  • 이것은 또한 당신이 할 수 있습니다.global.asax말씀하신 대로

당신은 오직 사용해야 합니다.301리소스가 정말로 영구적으로 이동한 경우 응답 코드.다시 말하지만, 이는 응용프로그램이 쿼리 문자열 매개변수를 사용해야 하는지 여부에 따라 달라집니다.영구 리디렉션 브라우저를 사용하는 경우(이는301응답 코드)에서 .../default.aspx?utm_source= twitter&utm_medium=social-media와 같은 URL 로드를 건너뛰고 .../default.aspx - 쿼리 문자열 매개 변수에 대해서도 알 수 없습니다.

마지막으로 사용할 수 있습니다.POSTmethod requests.이렇게 하면 깨끗한 URL을 제공하고 매개 변수를 전달할 수 있지만 다음과 같은 경우에만 작동합니다.<form>요소 또는 자바스크립트를 사용하여 작성하는 요청.

URIBuilder 클래스를 보십시오.url 문자열을 사용하여 url 문자열을 만들 수 있습니다. 그러면 개체가 이 url을 구문 분석하여 원하는 요소에만 액세스할 수 있습니다.

쿼리 문자열에 대한 처리를 완료한 후 물음표에서 URL을 분할하기만 하면 됩니다.

Dim _CleanUrl as String = Request.Url.AbsoluteUri.Split("?")(0)
Response.Redirect(_CleanUrl)

제 솔루션은 VB에 있습니다.NET, 하지만 꽤 쉽게 포팅할 수 있을 거라고 생각합니다.또한 분할의 첫 번째 요소만 찾고 있기 때문에 쿼리 문자열이 없을 때도 우아하게 "실패"합니다.

언급URL : https://stackoverflow.com/questions/1188096/truncating-query-string-returning-clean-url-c-sharp-asp-net

반응형