Edit (2/4/16): You can get the URL
from the appSetting/EnvironmentVariable websiteUrl
. This will also give you the custom hostname if you have one setup.
There are few of ways you can do that.
1. From the HOSTNAME
header
This is valid only if the request is hitting the site using <SiteName>.azurewebsites.net
. Then you can just look at the HOSTNAME
header for the <SiteName>.azurewebsites.net
var hostName = Request.Headers["HOSTNAME"].ToString()
2. From the WEBSITE_SITE_NAME
Environment Variable
This just gives you the <SiteName>
part so you will have to append the .azurewebsites.net
part
var hostName = string.Format("http://{0}.azurewebsites.net", Environment.ExpandEnvironmentVariables("%WEBSITE_SITE_NAME%"));
3. From bindingInformation
in applicationHost.config
using MWA
you can use the code here to read the IIS config file applicationHost.config
and then read the bindingInformation
property on your site. Your function might look a bit different, something like this
private static string GetBindings()
{
// Get the Site name
string siteName = System.Web.Hosting.HostingEnvironment.SiteName;
// Get the sites section from the AppPool.config
Microsoft.Web.Administration.ConfigurationSection sitesSection =
Microsoft.Web.Administration.WebConfigurationManager.GetSection(null, null,
"system.applicationHost/sites");
foreach (Microsoft.Web.Administration.ConfigurationElement site in sitesSection.GetCollection())
{
// Find the right Site
if (String.Equals((string) site["name"], siteName, StringComparison.OrdinalIgnoreCase))
{
// For each binding see if they are http based and return the port and protocol
foreach (Microsoft.Web.Administration.ConfigurationElement binding in site.GetCollection("bindings")
)
{
var bindingInfo = (string) binding["bindingInformation"];
if (bindingInfo.IndexOf(".azurewebsites.net", StringComparison.InvariantCultureIgnoreCase) > -1)
{
return bindingInfo.Split(':')[2];
}
}
}
}
return null;
}
Personally, I would use number 2
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…