仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 848|回复: 11
打印 上一主题 下一主题

[学习教程] ASP.NET教程之遭受ASP.NET的Request is not available in this context仓酷云

[复制链接]
活着的死人 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:20:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
完全不一样的。.net其实我也说不太清,.net可以把他理解为跟J2EE相对的工具。c++主要做系统相关的开发你要学.net的话就应该学C#。(其实微软在.NET平台上也考虑了给C++留一个地位。前一篇文章埋怨了一下ASP.NETFormsAuthentication的计划,这篇文章要埋怨一下HttpContext的计划。
假如ASP.NET程序以IIS集成形式运转,在Global.asax的Application_Start()中,只需会见Context.Request,好比上面的代码
  1. varrequest=Context.Request;
复制代码
就会激发非常:
Requestisnotavailableinthiscontext
不信你能够尝尝。
这个成绩只会呈现在IIS集成形式(Integrated),假如改成传统形式(Classic),成绩就不会呈现。
明天就被这个成绩小小折腾了一下。我们在毛病日记模块中增添了纪录以后会见网址的操纵,如许,产生毛病时,我们能够正确地晓得激发毛病的会见网址。我们增加了上面如许的代码:
  1. HttpContextcontext=HttpContext.Current;if(context!=null&&context.Request!=null&&context.Request.Url!=null){returncontext.Request.Url.AbsoluteUri;}
复制代码
然后将更新的日记模块部署到服务器上,在一个使用中却呈现“Requestisnotavailableinthiscontext”非常,以下图:

从下面的非常信息能够看出,非常产生于在Application_Start中会见HttpContext的Request属性时(该使用在Application_Start举行了日记纪录操纵,以是会见了HttpContext.Request)。
用ILSpy检察HttpContext的代码:
  1. internalboolHideRequestResponse;publicHttpRequestRequest{get{if(this.HideRequestResponse){thrownewHttpException(SR.GetString("Request_not_available"));}returnthis._request;}}
复制代码
能够看出,这个非常是在HideRequestResponse==true时扔出的,也就是说在Application_Start阶段,HideRequestResponse的值是true。
让人狐疑的中央是既然在HideRequestResponse==true时不同意会见Request属性,那HttpContext为何不供应一种体例让挪用者晓得——“此时严禁挪用Request”。假如挪用者挪用前能够反省一下相干划定,就不必这么既华侈情感,又要支付价值(捕捉这个HttpException)。
别的,我们的需求只是想失掉以后哀求的URL,不克不及会见Request,我们就不克不及失掉这个URL。岂非在Application_Start时就不克不及失掉以后哀求的URL,这个URL是从内部(IIS)传送给ASP.NETRuntime的,与ASP.NETRuntime的形态基本有关,有点想欠亨。。。
无法,只能迁就着先把成绩办理,经由过程捕捉非常举行判别,代码以下:
  1. HttpContextcontext=HttpContext.Current;if(context!=null&&context.Request!=null&&context.Request.Url!=null){try{returncontext.Request.Url.AbsoluteUri;}catch(Exceptionex){if(exisHttpException){returnstring.Empty;}}}
复制代码
后续文章:关于在Application_Start中会见Context.Request
以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么?
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-20 20:51:06 来自手机 | 只看该作者
现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
冷月葬花魂 该用户已被删除
板凳
发表于 2015-1-21 09:28:08 | 只看该作者
ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。
透明 该用户已被删除
地板
发表于 2015-1-29 15:57:41 | 只看该作者
PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。
第二个灵魂 该用户已被删除
5#
发表于 2015-2-4 14:23:47 | 只看该作者
Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
admin 该用户已被删除
6#
发表于 2015-2-6 18:31:32 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
活着的死人 该用户已被删除
7#
 楼主| 发表于 2015-2-13 06:14:46 | 只看该作者
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-3 15:45:51 | 只看该作者
CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
金色的骷髅 该用户已被删除
9#
发表于 2015-3-5 23:45:15 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
乐观 该用户已被删除
10#
发表于 2015-3-6 22:11:28 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
只想知道 该用户已被删除
11#
发表于 2015-3-13 22:07:20 | 只看该作者
CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
再现理想 该用户已被删除
12#
发表于 2015-3-20 19:59:12 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 04:30

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表