HttpServerUtility.Execute,MSDN上的解析是这样的:在当前请求的上下文中执行指定虚拟目录的处理程序。同时间还列出了它的4个重载的方法:
Execute(string),Execute(string,bool),Execute(string,TextWriter,bool),Execute(IHttphandler,TextWriter,bool)
我们主要来谈谈后面两个。
Execute(string,TextWriter,bool)第一个string类型的参数的解析是:要执行的URL路径,所以我个人理解成是请求的虚拟路径。
Execute(IHttphandler,TextWriter,bool)第一个IHttphandler类型参数的解析是一个接口,接口本身是没有意义的,主要是Httphandler实现了它。说到Httphandler我多说一句。Httphandler是Http请求的处理中心,也正在Httphandler里面,ASP.NET对我们请求的页面做了执行的动作,然后将处理之后的结果附加在HTTP流中再返回到HttpModule中。
下面我分别尝试了调用了这两个方法:
首先是Execute(string,TextWriter,bool)
- public void Proce***equest(HttpContext context)
- {
- string url = context.Request.FilePath;
- StringWriter sw = new StringWriter();
- context.Server.Execute(url ,sw,false);
- context.Response.Write(sw.ToString());
- }
但是它每次都会在context.Server.Execute(url ,sw,false); 这一句抛出异常:为XXX.aspx执行子请求时出错!
后来我把程序改成Execute(IHttphandler,TextWriter,bool)
- public void Proce***equest(HttpContext context)
- {
- string url = context.Request.FilePath;
- IHttpHandler handler = BuildManager.CreateInstanceFromVirtualPath(url, typeof(object)) as IHttpHandler;
- StringWriter sw = new StringWriter();
- context.Server.Execute(handler,sw,false);
- context.Response.Write(sw.ToString());
- }
居然通过了!
我始终找不到问题的所在,百度与谷歌都翻遍了,还是找不到想要的答案,而且也没有找到有人提出相类似的问题!!这难道是我对这个函数的参数或者用法理解错了?困惑中
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。