如何获取正在执行MVC3项目的服务器的URL?我不想硬编码服务器地址。
我将使用三台服务器:
以上所有服务器都没有相同的网址。
我的网络项目需要生成包含可点击链接的通知电子邮件。
我知道Request.Url.ToString()会让我获得服务器,但如果可能的话,我每次生成电子邮件时都不会花时间处理该字符串。
答案 0 :(得分:4)
您可以处理Request.Url
一次并将结果存储在静态变量中。只需确保以线程安全的方式访问该变量。我已经在制作中使用了很长一段时间,它就像一个魅力。
答案 1 :(得分:2)
HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority + HttpContext.Current.Request.ApplicationPath;
应该为你做的伎俩
答案 2 :(得分:1)
Request.URI是要走的路。如果您真的担心性能,请对其进行分析。我几乎可以保证结果不会很糟糕。如果是,您可以通过Request.ServerVariables [“HTTP_HOST”] Request.ServerVariables [“SERVER_NAME”]等手动从标题中读取它
答案 3 :(得分:1)
不确定这是否是您所追求的,但我最近必须获取IIS上默认网站的URL。事实证明这是一个真正的痛苦,但我设法得到了这个有效的代码......
using System.DirectoryServices;
using System.Diagnostics;
private string GetDefaultSite()
{
using (DirectoryEntry w3svc2 = new DirectoryEntry("IIS://Localhost/W3SVC"))
{
foreach (DirectoryEntry de in w3svc2.Children)
{
if (de.SchemaClassName == "IIsWebServer" &&
de.Properties["ServerComment"].Value.ToString() == "Default Web Site")
{
string binding = de.Properties["ServerBindings"].Value.ToString();
string[] split = binding.Split(':');
if (split[2] == "") return "http://localhost/";
else return "http://" + split[2] + "/";
}
}
}
return "";
}
答案 4 :(得分:0)
查看Server Variables,您可以在那里找到服务器名称。
SERVER_NAME
可能是一个不错的选择。
答案 5 :(得分:0)
其中一项应该有效:
Response.Write Server.MachineName;
Response.Write Request.ServerVariables["LOCAL_ADDR"];
答案 6 :(得分:0)
您可以使用Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
。这将返回从http ....开始直到服务器名称和端口的服务器。