2009-02-19 3 views
47

웹 응용 프로그램이 다른 서버의 다른 응용 프로그램과 파일을 더 쉽게 공유하도록 마스터 페이지에 기본 href 태그를 사용하고 있습니다. 많은 사람들이 발견했듯이 웹 양식 경로가 손상됩니다. 작동하는 Form Adapter 클래스가 있지만 URL의 절대 경로를 얻는 방법을 모르겠습니다. 현재 내 프로그램은 유사한 것을 사용하는 하드 코드 :Asp.Net URL의 절대 경로

HttpContext Context = HttpContext.Current; 
value = "http://localhost" + Context.Request.RawUrl; 

그것은 내가 현재 내 로컬 IIS 서버에서 테스트하고 있습니다 지적 가치, 그래서 내가 사용 해봤 많은 것들에 대한 이상한 경향이있다 순서대로 절대 경로에 도메인 이름이 포함되지 않습니다 (내 로컬 IIS는 외부에서 볼 수 없음). 즉, 절대 경로가 아니므로 기본 href가 파손됩니다.

하드 코딩을하지 않고도 로컬에서 작동하지만 서버에 업로드하면 제대로 작동 할 수 있도록 처리하는 좋은 방법이 있습니까? 나는 서버 측 복사본에서 뭔가 다른 일을하는 것을 피하는 것을 선호한다.

예, 별도의 web.config 파일을 로컬 및 서버에서 사용하여이 정보를 얻을 수 있다는 것을 알았지 만 추악하고 DRY를 위반합니다.

+0

잘 모르겠지만 Request.Url.Host를 사용해 보셨습니까? –

답변

108

나는 과거에 이것을 사용했습니다 :

// Gets the base url in the following format: 
// "http(s)://domain(:port)/AppPath" 
HttpContext.Current.Request.Url.Scheme 
    + "://" 
    + HttpContext.Current.Request.Url.Authority 
    + HttpContext.Current.Request.ApplicationPath; 
-9

코드 : 여기

string loginUrl = Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/") + "Login/Login.aspx?UserName=" + LoggedinUser["UserName"] + "&Password=" + LoggedinUser["Password"]; 
+7

URL에 암호를 입력하는 것은 아주 나쁜 일입니다. 그러지 마. –

2

이전 게시물 그러나 나는 다음과 같은 사용하고 다른 약간 덜 자세한 방법

var baseUri = new Uri(HttpContext.Current.Request.Url, "/"); 
0

이며, 그것은 나를 위해 클라이언트와 서버 모두에서 일했습니다.

string surl = string.Format("{0}://{1}", 
    HttpContext.Current.Request.Url.Scheme, 
    HttpContext.Current.Request.Url.Authority);