曲线救国:IIS7集成模式下如何获取网站的URL
2015-04-09 09:04
239 查看
如果我们在Global中的Application_Start事件中访问HttpContext.Current.Request对象,如:
只是简单的想取一下当前网站的URL。在调试的时候一切正常,但当我们把网站发布到IIS上面的时候,如果IIS应该程序池在集成模式,就会是会报“请求在此上下文中不可用”的异常,但如果是经典模式就不会。dudu这篇文章有详细的说明 /article/4583875.html
一般来说,解决这个问题,两个方法:
1.将IIS应用程序池改成经典模式
2.不要在Application_Start中访问HttpContext.Current.Request对象。
但是在有些特殊情况下,在集成模式下能不能在Application_Start获取当前站点的URL。
虽然我们不能调用HttpContext.Current.Request对象,但是我们通过System.Web.Hosting.HostingEnvironment.ApplicationID可以获取IIS站点的部署信息。
通过站点的绑定信息间接获取网站的URL.
当然这种方法只适用于我们只需要知道网站域名的情况下,或我们可以确定第一次访问网站的初始页面。
protected void Application_Start() { var url=HttpContext.Current.Request.Url.ToString(); }
只是简单的想取一下当前网站的URL。在调试的时候一切正常,但当我们把网站发布到IIS上面的时候,如果IIS应该程序池在集成模式,就会是会报“请求在此上下文中不可用”的异常,但如果是经典模式就不会。dudu这篇文章有详细的说明 /article/4583875.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(0, bingdings.Length - 1); } url = "http://"+bingdings; } return url; }
当然这种方法只适用于我们只需要知道网站域名的情况下,或我们可以确定第一次访问网站的初始页面。
相关文章推荐
- IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- 如何获取客户端上次请求的 URL 的信息
- 如何获取上次访问的url地址
- 关于.net多层架构的网站如何在底层类库中获取网站的物理路径
- [原创] C#获取我的收藏网站及打开URL
- 购物网站1:常用到的工具类---泛型工具类---图像压缩工具---MD5加密---读取URL配置---获取用户购物车等
- 如何打开指定URL网站?(转贴)
- 如何获取视频网站的信息(土豆例子)
- 获取网站根目录的url
- Axure RP Pro - 相关问题 - 如何获取IFrame的URL
- 分类网站中这种模式如下 如果不使用Datalist 将如何编制 使用怎样的控件操作 希望哪位大虾 提供相关代码
- 通过request对象获取访问网站用户的 IP 访问者的浏览器名 操作系统名 从哪里转过来 以及 Url 上的所有参数
- 这个网站 精确的北京时间 是如何获取的
- MFC 文档/视图模式之如何获取文档内数据
- WSS3SDK之:如何获取网站和站点集对象
- 如何利用代码从网站上获取一个文件的大小,并且下载时不出现保存提示框
- 如何使用javascript在html中获取url参数——很好用
- 获取网站访问来源URL
- 根据URL获取网站标题