문제

웹앱이 다른 서버에 있는 다른 앱과 파일을 더 간단하게 공유할 수 있도록 마스터 페이지에서 기본 href 태그를 사용하고 있습니다.많은 사람들이 발견했듯이 이로 인해 웹 양식 경로가 중단됩니다.작동하는 Form Adapter 클래스가 있지만 URL의 절대 경로를 얻는 방법을 잘 모르겠습니다.현재 내 프로그램은 다음과 유사한 것을 사용하도록 하드코딩되어 있습니다.

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

현재 로컬 IIS 서버에서 테스트 중이라는 점은 주목할 가치가 있으므로 절대 경로에 도메인 이름이 포함되지 않는 순서대로 사용하려고 시도한 많은 항목에 이상한 경향이 있습니다(내 로컬 IIS가 표시되지 않음). 외부적으로).즉, 절대 경로가 아니므로 기본 href가 이를 망가뜨릴 것입니다.

하드코딩 없이 로컬에서 작동하지만 서버에 업로드할 때도 제대로 작동하도록 이를 처리하는 좋은 방법이 있습니까?나는 서버 측 복사본에서 다른 작업을 수행하는 것과 관련된 모든 작업을 피하고 싶습니다.

예, 이 정보를 얻기 위해 로컬과 서버에서 별도의 web.config 파일을 사용할 수 있다는 것을 알고 있지만 이는 보기 흉하고 DRY를 위반합니다.

도움이 되었습니까?

해결책

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

// 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;

다른 팁

오래된 게시물이지만 여기에 약간 덜 자세한 방법이 있습니다.

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

나는 다음을 사용했으며 클라이언트와 서버 모두에서 효과적이었습니다.

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

코드:

string loginUrl = Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/") + "Login/Login.aspx?UserName=" + LoggedinUser["UserName"] + "&Password=" + LoggedinUser["Password"];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top