2014-11-19 2 views
2

asp.net 웹 양식 응용 프로그램에서 작업 중이며 링크가 작성되어 사용자의 전자 메일로 암호를 재설정합니다.웹 사이트의 URL 얻기

유일한 문제는 네트워크 외부 사용자에 대한 링크를 만들 때 링크에 액세스 할 때 사용했던 웹 사이트 이름 대신 서버 이름과 포트 번호가 표시된다는 것입니다. 여기

https://testsite.com/reset?key=value 작성하려면 코드입니다 : 내가 https://testsite.com에 액세스하고 내가 이메일을 생성하는 경우 예를 들어

은 링크 내가 이메일에있는 링크이 원하는 https://testserver:1111

로 온다 링크

HttpContext.Current.Request.Url.Scheme + "://" 
     + HttpContext.Current.Request.Url.Authority 
     + HttpContext.Current.Request.ApplicationPath.TrimEnd('/') 
     + "/PasswordReset.aspx; 

서버의 이름이 아닌 웹 사이트 이름을 표시하는 코드는 어떻게 얻을 수 있습니까?

웹 서버에서 문제가 될 수 있습니까? (IIS를 사용하고 있습니까?) 당신이 appSettings는 사용할 수

+0

도메인이 DNS에 정의되어있어 앱에서 쉽게 액세스 할 수 없습니다. 포스트 백 또는 직접적인 사용자 작업에서 보낸 전자 메일의 경우 요청에있는 참조 자의 URL을 가져올 수 있습니다. –

답변

0

해결책을 찾았습니다.

int lastSlash = HttpContext.Current.Request.ServerVariables["HTTP_REFERER"].LastIndexOf('/'); 
string uri = (lastSlash > -1) ? 
      HttpContext.Current.Request.ServerVariables["HTTP_REFERER"].Substring(0, lastSlash) : 
      HttpContext.Current.Request.ServerVariables["HTTP_REFERER"]; 

// Return the link with leading slashes 
return uri + HttpContext.Current.Request.ApplicationPath.TrimEnd('/') 
      + "/PasswordReset.aspx?key=value" 

내가 올바른 URL을 얻기 위해 서버 변수 HTTP_REFERER를 사용하는 데 필요한 : SO의 다른 솔루션에서 해답을 사용하여, 나는이 코드를 사용했다. 도움말 모두

감사합니다.

1

하거나 HttpContext.Current.Request [ "HTTP_HOST"]

<appSettings> 
    <add key="DOMAIN" value="www.mysite.com"/> 
</appSettings> 

그리고 당신은

HttpContext.Current.Request.Url.Host 대신 HttpContext.Current.Request.Url.Authority 사용할 수있는 단지

string domain = HttpContext.Current.Request["HTTP_HOST"]; 
string myUrl = "";  

if(HttpContext.Current.Request.IsSecureConnection) 
    myUrl = string.Format("https://{0}/passwordreset.aspx?key={1}",domain,yourvalue); 
else 
    myUrl = string.Format("http://{0}/passwordreset.aspx?key={1}",domain,yourvalue); 

// do something with your myUrl. 
+0

'Request [ "HTTP_HOST"]'메소드가 작동하지 않았습니다. 여전히 서버 이름과 포트 번호를 반환했습니다. ''솔루션의 유일한 문제점은 사용자가 서버와 동일한 네트워크에 있으면 페이지를 표시하지 않는다는 것입니다. – RXC

1

.

HttpContext.Current.Request.Url.Authority 서버의 DNS 이름과 포트 번호를 반환합니다. 그래서 이메일에 DNS (테스트 서버)와 포트 번호 (1111) https://testserver:1111 링크가 제공됩니다.

+0

불행히도 이것은 작동하지 않았습니다. 나는 여전히 서버 이름과 포트 번호를 얻고 있습니다. 외부 사이트 이름이 웹 서버에 설정되어 있기 때문일 수 있습니까? – RXC