[C#/ASP.NET] 현재 페이지 Url 가져오기 (Request.Url)
안녕하세요 코북입니다. 이번 03-24 업데이트 릴리즈에 참여하면서 모든 페이지에서 작동하는 기능을 특정 페이지에서만 작동하도록 처리해야 하는 요구사항이 있었습니다. 특정 페이지의 주소를 가지고 와서 조건을 만들어야 하기 때문에 현재 페이지의 주소를 가져오는 Request.Url 클래스를 사용하여 구현했습니다. 다음 경로를 예시로 하여 각각의 메서드들이 어떤 결과값을 가져오는지 알아보겠습니다.
경로 : https://cobook.tistory.com/manage/newpost/?type=post&page=1
1. Request.Url.Host : 도메인명
결과 : cobook.tistory.com
2. Request.Url.Port : 포트번호
결과 : 80
경로가 localhost:0324라면 결과는 0324가 됩니다.
3. Request.Url.Authority : 도메인명 + 포트번호
결과 : cobook.tistory.com:80
4. Request.Url.AbsolutePath : 도메인명, 포트, 쿼리스트링 값이 제외된 전체 주소
결과 : /manage/newpost/
5. Request.Url.AbsoluteUri : 도메인명, 포트, 쿼리스트링 값이 포함된 전체 주소
결과 : https://cobook.tistory.com/manage/newpost/?type=post&page=1
6. Request.Url.PathAndQuery : 도메인명, 포트 제외한 쿼리스트링 값이 포함된 주소
결과 : /manage/newpost/?type=post&page=1
7. Request.Url.LocalPath : 로컬 주소
결과 : /manage/newpost/
경로가 https://cobook.tistory.com 이라면 결과 값은 "/" 입니다.
이 메서드를 활용하여 특정 페이지에서만 반응하도록 조건을 줄 수 있습니다.
@if (@Request.Url.LocalPath.ToLower() == "특정url" or @Request.Url.LocalPath.ToLower().IndexOf("특정url") >= 0)
{
// 조건
}
if문의 첫 번째 조건은 특정 url과 완전히 일치하는 경우의 조건을 준 것이고, 두 번째 조건은 특정 url을 포함할 경우 IndexOf() 메서드를 사용하여 값을 처리한 경우입니다. 찾는 문자열이 없으면 -1을 리턴하기 때문에 0보다 크거나 같다는 조건을 줬습니다. ToLower()은 string값을 소문자로 변환하여 반환시켜줍니다.
※ Request.Url 객체의 네임스페이스는 System.Web의 HttpRequest 클래스에서 지원합니다.
※ Controller에서 사용할 때는 위에 기술한 대로 사용하면 되고 View에서 사용할 때는 Request.Url 앞에 HttpContext.Current. 를 붙여 사용하시면 됩니다.
예시 : HttpContext.Current.Request.Url.LocalPath
Request.Url 객체뿐만 아니라 Request 객체에서도 비슷한 기능들을 제공합니다.
경로 : https://cobook.tistory.com/manage/newpost/?type=post&page=1
1. Request.Url
결과 : https://cobook.tistory.com/manage/newpost/?type=post&page=1
2. Request.Path
결과 : /manage/newpost/
3. Request.QueryString
결과 : type=post&page=1
Request 객체의 경우 쿼리 문자열의 변수 값을 가져올 수 도 있습니다.
String type = Request.QueryString["type"];
String page = Request["page"];
두 가지 방법 모두 가능한데 차이점이 존재합니다. 첫 번째 줄의 방법은 쿼리 문자열의 키 "type"만 찾습니다. 두 번째 줄의 방법은 모든 HTTP 요청 컬렉션에서 "page" 키를 찾습니다.
또한 Request.QueryString 을 사용할 경우 null값 예외처리도 하고 사용하는 것을 권장합니다.
@if(Request.QueryString["type"] != null)
{
<text>
var type = @request.QueryString["type"].ToString();
</text>
}
배운 점
웹 개발을 하면서 현재 페이지나 특정 페이지 주소를 가져와서 조건을 만드는 작업을 처음 해보면서 Request 객체와 Request.Url 객체에 대해 공부할 수 있는 시간이었습니다. 추가적으로 쿼리스트링을 활용한 값 처리에도 응용할 수 있을 것 같습니다.
본 글은 아래 링크의 내용을 참고하여 학습한 내용을 나름대로 정리한 글임을 밝힙니다.
https://docs.microsoft.com/ko-kr/dotnet/api/system.web.httprequestbase?view=netframework-4.8
https://docs.microsoft.com/ko-kr/dotnet/api/system.web.httprequest.querystring?view=netframework-4.8