以编程方式获取IIS服务器URL

时间:2012-01-13 17:11:48

标签: asp.net asp.net-mvc-3

简短版本:

如何获取正在执行MVC3项目的服务器的URL?我不想硬编码服务器地址。

长版:

我将使用三台服务器:

  1. 开发服务器
  2. 其他人要测试的QA服务器
  3. 生产服务器
  4. 以上所有服务器都没有相同的网址。

    我的网络项目需要生成包含可点击链接的通知电子邮件。

    我知道Request.Url.ToString()会让我获得服务器,但如果可能的话,我每次生成电子邮件时都不会花时间处理该字符串。

7 个答案:

答案 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 ....开始直到服务器名称和端口的服务器。

相关问题