쿼리 문자열 잘라내기 및 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 - 쿼리 문자열 매개 변수에 대해서도 알 수 없습니다.
마지막으로 사용할 수 있습니다.POST
method 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
'programing' 카테고리의 다른 글
분산형 워크플로우를 위한 "simple" 대 "현재" push.default intit (0) | 2023.10.10 |
---|---|
Linux 및 Windows에서 모두 실행할 휴대용 라이브러리 만들기 (0) | 2023.10.10 |
쿼리 내부 쿼리에서 "열로" 반환됨 (0) | 2023.10.05 |
MySQL Workbench - 이름이 다른 동일한 서버에서 데이터베이스를 복제하는 방법? (0) | 2023.10.05 |
네트워크 포트 액세스를 확인하고 유용한 메시지를 표시하는 방법은 무엇입니까? (0) | 2023.10.05 |