|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
完全不一样的。.net其实我也说不太清,.net可以把他理解为跟J2EE相对的工具。c++主要做系统相关的开发你要学.net的话就应该学C#。(其实微软在.NET平台上也考虑了给C++留一个地位。前一篇文章埋怨了一下ASP.NETFormsAuthentication的计划,这篇文章要埋怨一下HttpContext的计划。
假如ASP.NET程序以IIS集成形式运转,在Global.asax的Application_Start()中,只需会见Context.Request,好比上面的代码- varrequest=Context.Request;
复制代码 就会激发非常:
Requestisnotavailableinthiscontext
不信你能够尝尝。
这个成绩只会呈现在IIS集成形式(Integrated),假如改成传统形式(Classic),成绩就不会呈现。
明天就被这个成绩小小折腾了一下。我们在毛病日记模块中增添了纪录以后会见网址的操纵,如许,产生毛病时,我们能够正确地晓得激发毛病的会见网址。我们增加了上面如许的代码:- 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的代码:- 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的形态基本有关,有点想欠亨。。。
无法,只能迁就着先把成绩办理,经由过程捕捉非常举行判别,代码以下:- 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
以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么? |
|