曲线救国:IIS7集成模式下如何获取网站的URL
如果我们在Global中的Application_Start事件中访问HttpContext.Current.Request对象,如:
protected void Application_Start()
{
var url=HttpContext.Current.Request.Url.ToString();
}
只是简单的想取一下当前网站的URL。在调试的时候一切正常,但当我们把网站发布到IIS上面的时候,如果IIS应该程序池在集成模式,就会是会报“请求在此上下文中不可用”的异常,但如果是经典模式就不会。dudu这篇文章有详细的说明 http://www.cnblogs.com/dudu/archive/2011/10/14/Application_Start_Context_Request.html
一般来说,解决这个问题,两个方法:
1.将IIS应用程序池改成经典模式
2.不要在Application_Start中访问HttpContext.Current.Request对象。
但是在有些特殊情况下,在集成模式下能不能在Application_Start获取当前站点的URL。
虽然我们不能调用HttpContext.Current.Request对象,但是我们通过System.Web.Hosting.HostingEnvironment.ApplicationID可以获取IIS站点的部署信息。
通过站点的绑定信息间接获取网站的URL.
void Application_Start(object sender, EventArgs e)
{
//var url = HttpContext.Current.Request.Url.ToString();
var url = GetUrl();
// 在应用程序启动时运行的代码
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterOpenAuth();
} private string GetUrl()
{
string path = System.Web.Hosting.HostingEnvironment.ApplicationID; //值类似于:/LM/W3SVC/3/ROOT
string url = string.Empty;
try
{
//如果HttpContext可以访问就直接返回通过HttpContext获取的结果
return HttpContext.Current.Request.Url.ToString();
}
catch (Exception)
{
}
// 将Path转换成IIS路径
path = path.Replace("/LM", "").Replace("/ROOT", "");
string entPath = string.Format("IIS://localhost{0}", path);
DirectoryEntry entry = new DirectoryEntry(entPath);
if (entry.Properties.Contains("ServerBindings"))
{
var bingdings = entry.Properties["ServerBindings"].Value.ToString();//得到的结果类似于10.188.188.13:8082:
//去掉结尾的 : 号
if (bingdings.EndsWith(":"))
{
bingdings = bingdings.Substring(, bingdings.Length - );
}
url = "http://"+bingdings;
} return url;
}
当然这种方法只适用于我们只需要知道网站域名的情况下,或我们可以确定第一次访问网站的初始页面。
曲线救国:IIS7集成模式下如何获取网站的URL的更多相关文章
- IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求
今天将开发好的ASP.NET站点部署到客户的服务器上后,发现了一个非常头疼的问题,那么就是IIS7的应用程序池是集成模式的话,ASP.NET项目中自定义的HttpModule会处理静态文件(.html ...
- IIS8集成模式下打开静态资源被aspx处理程序处理,StaticFileModule失效问题分析
问题描述: 打开js,css,jpg之类的静态资源文件触发了asp.net mvc的权限认证,并不是直接返回静态内容 问题分析: StaticFileModule 失效 ,可能是文件权限问题 问题解决 ...
- nginx 代理模式下,获取客户端真实IP
最近做博友推荐,发现个小问题,用$_SERVER['REMOTE_ADDR'];得到的都是服务器的地址192.168.96.52,搜索了一下,发现问题,改为$_SERVER['HTTP_X_REAL_ ...
- 【解决】SharePoint集成模式下Reporting Service—为用户授予的权限不足,无法执行此操作。 (rsAccessDenied)
环境:Windows Server 2008 R2 SP1,SharePoint 2010 企业版,SQL Server 2008 R2 Reporting Service(SharePoint集成模 ...
- 微软URLRewriter.dll的url重写在目标框架.Net Framework2.0、4.0和应用程序池经典模式、集成模式下的配置
大家参考几篇园子里面的这篇文章: 文章1:微软URLRewriter.dll的url重写的简单使用 (讲解了使用UrlReWriter.dll的下载.web.config如何在目标框架2.0应用程序池 ...
- Spring MVC模式下,获取WebApplicationContext的工具类 方法
在已有的注解类型下,获取WebApplicationContext的工具类 通过 WebApplicationContextUtils.getRequiredWebApplicationContex ...
- IIS集成模式下,URL重写后获取不到Session值
近期给公司网站添加了伪静态功能,但是今天发现了在伪静态的页面中,Session值是获取不到的. 原因是在伪静态请求的时候,Session请求被“过滤”掉了. 开始是把web.config文件中的mod ...
- Splunk - 如何在WebFramework之CORS模式下你的网站和splunk web进行交互
1. 修改配置文件以支持CORS 进入/Applications/Splunk/etc/system/local 修改server.conf 在最后加入如下: [httpServer]crossOri ...
- VirtualBox、VMware在桥接模式下无法获取ip地址问题
声明: 参考 https://blog.csdn.net/lcdcxy/article/details/49362171 https://jingyan.baidu.com/article/948f5 ...
随机推荐
- Office2013插件开发Outlook篇(1)-- 第一个office2013插件
一.环境: 下载VS2013安装,记得安装office插件开发包哦. 二.新建Outlook插件项目
- 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- 源码升级安装python
1.下载 python: https://www.python.org/downloads/release/python-2712/ 2.编译安装 sudo mkdir /usr/local/pyth ...
- [Think In Java]基础拾遗4 - 并发
第21章节 并发 1. 定义任务 任务:任务就是一个执行线程要执行的一段代码.(在C语言中就是函数指针指向的某个地址开始的一段代码) [记忆误区]:任务不是线程,线程是用来执行任务的.即任务由线程驱动 ...
- Zabbix监控php-fpm status
开启php-fpm status php-fpm.conf pm.status_path = /statusx45 nginx.conf location ~ /(statusx45)$ { incl ...
- 如何合并多个PPT
事情的起因大概是这样的: 于是我接收了文件 15个ppt,手动合并,我脑子有病吗,作为一个程序员,最基本的修养之一就是:超过三分钟的工作全部给电脑. 于是乎找到了pptjoin(一听名字就知道干嘛的) ...
- XPath函数——字符串函数(转载)
本文是转载的,原文网址:http://www.cnblogs.com/zhaozhan/archive/2010/01/17/1650242.html 字符串函数主要用来处理字符串.字符串函数主要包括 ...
- Win7中怎么不经确认直接删除文件至回收站
Win7中怎么不经确认直接删除文件至回收站.. 1.双击桌面回收站的图标,进入回收站后,在空白处点击右键,选择属性:2.在回收站的属性对话框,最下边,把"显示删除确认对话框”前边的√去掉,应 ...
- sublime2使用jshint
合理配置Jshint可以帮助写出高质量的代码,通过sublime2插件 JSHint Gutter 可以迅速提供开发效率和减少bug的个数. 1.安装JSHint Gutter插件 sublime2按 ...
- SQL SERVER批量修改表名前缀
比如前缀由mms_修改为 ets_ exec sp_msforeachtable @command1=' declare @o sysname,@n sysname ...