我正在开发一个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)?
答案 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
来获取正确的网址。
感谢大家的帮助。