Azure网站有一个默认的"网站网址"由Azure提供,类似于mysite.azurewebsites.net。是否可以从网站内部(即从ASP.NET应用程序)获取此URL?
Environment和HttpRuntime类中有几个属性包含网站名称(例如" mysite"),因此可以轻松访问。当不是默认值时,事情变得复杂,例如访问该站点的暂存插槽(其网站URL如mysite-staging.azurewebsites.net)。
所以我只是想知道是否有直接获取此站点URL的简单方法。如果没有,那么使用其中一个提到的类来获取站点名称然后以某种方式检测站点槽(例如可以通过Azure门户中的配置值设置)将是解决方案
答案 0 :(得分:16)
修改(2/4/16):您可以从appSetting / EnvironmentVariable URL
获取websiteUrl
。如果您有一个设置,这也会为您提供自定义主机名。
你可以做的很少。
HOSTNAME
标题如果请求使用<SiteName>.azurewebsites.net
访问网站,则此选项仅 。然后,您只需查看HOSTNAME
<SiteName>.azurewebsites.net
标题即可
var hostName = Request.Headers["HOSTNAME"].ToString()
WEBSITE_SITE_NAME
环境变量这只是为您提供<SiteName>
部分,因此您必须附加.azurewebsites.net
部分
var hostName = string.Format("http://{0}.azurewebsites.net", Environment.ExpandEnvironmentVariables("%WEBSITE_SITE_NAME%"));
bindingInformation
applicationHost.config
MWA
开始
您可以使用代码here to read the IIS config file applicationHost.config
然后阅读您网站上的bindingInformation
媒体资源。你的功能可能看起来有点不同,就像这样
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;
}
就个人而言,我会使用2号
答案 1 :(得分:1)
此外,您可以使用Environment.GetEnvironmentVariable("WEBSITE_HOSTNAME")
。
这将返回完整的URL("http://{your-site-name}.azurewebsites.net"
),不需要字符串操作。
要查看环境变量中可用属性的完整列表,只需在SCM PowerShell调试控制台中键入Get-ChildItem Env:
。