如果要把一个相对路径或者虚拟路径映射道服务器的物理路径,通常会使用Server.MapPath()函数,比如将根目录下的html目录映射为物理路径:Server.MapPath("html"),可以返回形如"E:\www\htm\"的字符串。通常情况下我们都不会遇到什么问题。

新手常常会发现在诸如自己的类文件中无法使用Server.MapPath(),这是由于没有引入相应的命名空间,只要把全名写出来,即用System.Web.HttpContext.Current.Server.MapPath(),问题就迎刃而解了。

最近老板让我做一个可以定时发布文章的CMS,他的意思是做一个网站,但是他不想管理这个网站,只是想一个月来管一次,但是又要保持网站每天更新(真是够懒的,想得还真美)。就是说网站每天会自己更新,多么好的网站啊。这里面我首先想到的是使用定时器,但是web程序是相当被动的,只有当用户请求时,它才会工作,这个问题困扰了我很久。

不过还好,几经周折才找到可以在global.asax中实现这种功能,该文件是一个网站应用程序可选的全局文件,定义了有很多事件,其中的Application_Start()函数可以在整个网站应用程序启动时被触发,因此我就在这里触发一个定时器,通过这个定时器不断触发我的定时发发布函数。

定时发布功能我做到了一个类里面,类里面用到了Server.MapPath(),但是这个类真的好奇怪,我在其他地方调用时都可以工作正常,但是在global.asax中调用是老是在MapPath()一行提示“未将对象引用设置到对象的实例”的错误。弄了N久也没有结果,郁闷至极,上网搜了N久,又到百度知道中花了200分悬赏也没有得到答案,千篇一律的给出使用Server.MapPath(),而这是根本不行的。

经过钻研,发现原来在global.axax中并没有请求上下文,因此System.Web.HttpContext是Null,更不要说使用其成员了,所以这条路是走不通了。难道就没有其他获取物理路径的方法了吗?又是一番周折,我发现了HttpRuntime这个神奇的类,它并不需要请求上下文,而它恰好有一个熟悉AppDomainAppPath,给出了当前应用程序的根目录,有了这个东西,加上我已知的虚拟路径不久得到了我相应的文件的物理路径了吗。试了一下,果然实现了,呵呵,一个困难又被我解决了。

总结一下:如果没有请求上下文System.Web.HttpContext就是空值,自然不能实现任何功能。如果想在这种情况下得到物理路径可以使用HttpRuntime.AppDomainAppPath获取应用程序的物理根目录,有了这个根目录就可以获取所有文件的物理路径了。

本文摘自:左正

定时发布任务,在global.asax中获取文件的物理路径的方法的更多相关文章

  1. Asp.Net Core 中获取应用程序物理路径(Getting the Web Root Path and the Content Root Path in ASP.NET Core)

    如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示: // Classi ...

  2. [转] ASPNET Core 中获取应用程序物理路径

    如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示: // Classi ...

  3. .Net Core api 中获取应用程序物理路径wwwroot

    如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示: // Classi ...

  4. 在HTML页面中获取当前项目根路径的方法

    在HTML页面获取项目根路径的方法: function getRootPath(){ var curPageUrl = window.document.location.href; var rootP ...

  5. [C#]中获取当前程序运行路径的方法

    获取当前程序运行路径: ①//获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集.string str = System.AppDomain.CurrentDoma ...

  6. webapi中取文件的物理路径(server.mappath)

    在Webapi中是用不了server.mappath方法的,上网搜索了一下,发现是用如下代码取得文件绝对路径: string logpath = System.Web.Hosting.HostingE ...

  7. Weblogic web应用中获取文件的绝对路径

    注意点: 1. file必须在/下,或者/WEB-INF/,不能在classes下 2. weblogic中进行如下配置,以获取绝对路径: <wls:container-descriptor&g ...

  8. 【转】VC中获取文件的相对路径和绝对路径

    原文网址:http://www.360doc.com/content/13/0703/16/3402399_297386231.shtml

  9. Global.asax中的操作数据库代码无法执行

    本人最近在做一个基于Access数据库的Web应用程序,为了实现一个定时更新数据库的需求,我在Global.asax中的Application_Start函数里写了个计时器, void Applica ...

随机推荐

  1. 杨氏矩阵查找元素位置Java实现

    杨氏矩阵是一个二维矩阵,特点是每一行的右边的元素比左边的大,每一列下面的元素比上面的大: 比如 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 假设要查找的变量为target ...

  2. jquery.range.js左右滑动选取数值插件,动态改变进度。

    作为一个初级前端工作人员,我最近在做一个关于直播的项目,其中一个功能要求是设置延迟时间, 所以就用到了jquery.range.js这个插件.插件中设置$(".single-slider&q ...

  3. 开发一个微信小程序教程

    一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可. 2.注册成功后进入首页,在 小程序发布流程->小程序 ...

  4. Android RecyclerView体验(一)- 简介

    在网上关于RecyclerView的基本使用方式已经有了比较详细介绍,而且其设计结构也类似于ListView,所以本文将不重点介绍如何使用,在文末的引用中都可以相关内容.这里主要是介绍Recycler ...

  5. javascript代码实现简单的五星评价功能!

    <script type="text/javascript"> //★ var spans=document.getElementsByTagName("sp ...

  6. Python各种花式截图工具,截到你手软

    前言: 最近,项目中遇到了一个关于实现通过给定URL,实现对网页屏幕进行截图的一个功能,前面代码中已经用python的第三方库实现了截图功能,但在上线以后出现了一些bug,所以就改bug的任务就落在了 ...

  7. [ios-必看] WWDC 2013 Session笔记 - iOS7中的多任务【转】

    感谢:http://onevcat.com/2013/08/ios7-background-multitask/ http://www.objc.io/issue-5/multitasking.htm ...

  8. go CD 用虚拟机快速增加一个新agent

    背景 最近项目在用go CD做持续交付.为了最大化利用硬件,所有的agent都是用的vbox的虚拟机.随着pipelines的增加,就需要增加更多的agent. 步骤 为了快速增加新的agent,最简 ...

  9. 分别使用Hadoop和Spark实现二次排序

    零.序(注意本部分与标题无太大关系,可直接调至第一部分) 既然没用为啥会有序?原因不想再开一篇文章,来抒发点什么感想或者计划了,就在这里写点好了: 前些日子买了几本书,打算学习和研究大数据方面的知识, ...

  10. trie树模板(统计难题)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...