获取网站的URL

时间:2014-11-19 20:12:49

标签: c# asp.net url

我正在开发一个asp.net网络表单应用程序,在其中我创建了一个链接,并通过电子邮件发送给用户重置密码。

唯一的问题是,当为网络外的用户创建链接时,链接会显示服务器的名称和端口号,而不是用于访问服务器的网站名称。

例如,如果我访问https://testsite.com然后生成电子邮件,则链接会显示为 https://testserver:1111

我希望电子邮件中的链接为:https://testsite.com/reset?key=value

以下是我创建链接的代码

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

如何让代码显示网站名称而不是服务器名称?

这可能是网络服务器的一个问题(我使用的是IIS)?

3 个答案:

答案 0 :(得分:1)

您可以使用appSettings或只使用HttpContext.Current.Request [" HTTP_HOST"]

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

刚刚

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.

答案 1 :(得分:1)

你必须使用

HttpContext.Current.Request.Url.Host代替HttpContext.Current.Request.Url.Authority

HttpContext.Current.Request.Url.Authority返回服务器的DNS名称和端口号。这就是您在电子邮件中获取DNS(testserver)和端口号(1111)https://testserver:1111链接的原因。

答案 2 :(得分:0)

我找到了解决方案。使用来自SO的另一个解决方案的答案,我使用了这段代码:

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"

我需要使用服务器变量HTTP_REFERER来获取正确的网址。

感谢大家的帮助。