chequan
03-28-2007, 06:02 PM
private void Application_Start(object sender, EventArgs e)
{
HttpContext ctx = HttpContext.Current;
//ctx.Server.Execute("Error.aspx");
ctx.Server.Transfer("Error.aspx");
}
以前代码无论用Execute还是Transfer执行另外的一个aspx页面,都出现异常。
[NullReferenceException: 未将对象引用设置到对象的实例。]
System.Web.HttpServerUtility.Execute(String path, TextWriter writer,
Boolean preserveForm) +416
[HttpException (0x80004005): 为 Error.aspx 执行子请求时出错。]
System.Web.HttpServerUtility.Execute(String path, TextWriter writer,
Boolean preserveForm) +719
System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
+53
System.Web.HttpServerUtility.Transfer(String path) +27
这是怎么回事呢?难道在Application_Start不能用Transfer吗?有办法解决吗?谢谢!
v-jicwan@prcvap.microsoft.com
03-29-2007, 07:08 AM
ã
ӭMSDNύ⣬ǽᾡ
Application_StartApplication_End¼ӣУΣţܵڣߣӣз쳣ڣߣţвΪڣߣӣӦʵûдɣӣԣġӣԣеҳתʹResponse.Redirect.ڣߣӣ¼нҳת⣬ԼContext.ApplicationInstance == nullȷǰǷЧĹġ
ʵ£
void Application_Error(object sender, EventArgs e)
{
if(Context.ApplicationInstance != null)
Context.Server.Transfer("~/errorinfo.aspx");
else
Context.Response.Redirect("~/errorinfo.aspx");
}
ϣܹһЩ
Jasson Wang
ֹ֧ʦ
ȫ֧
---------------------------------------------------------------------------------------
ǵķʱ䣺һ9:00-18:00ڼճ⣩ǽգ48СʱṩʼӦһо⡣鼼֧Ϣʣhttp://support.microsoft.com/gp/newsgroupsupport/zh-cn.
ʱĶʹáظ(Reply to Group)⽫ûл档
---------------------------------------------------------------------------------------
ԡ״ṩûκεͬʱҲûκȨ
he.d.d.shan
03-30-2007, 05:42 AM
ʱûûContentôִSystem.Web.HttpServerUtility.Transfer
ҪִҪûģҲ˵Page.ContextApplication.Context벻Ϊnull
Ĵ룺
void Application_Error(object sender, EventArgs e)
{
if(Context.ApplicationInstance != null)
Context.Server.Transfer("~/errorinfo.aspx");
else
Context.Response.Redirect("~/errorinfo.aspx");
}
ҲܳContextͿnullûĵĴִг쳣ʱͿܷ
<v-jicwan@prcvap.microsoft.com> дϢ
news:1c2547bc-c09c-43b8-803d-660ab830a4f2@ms.shabap01.publicpsswebcat...
> ã
>
> ӭMSDNύ⣬ǽᾡ
>
> Application_StartApplication_End¼ӣУΣţܵڣߣӣз쳣ڣߣţвΪڣߣӣӦʵûдɣӣԣġӣԣеҳתʹResponse.Redirect.ڣߣӣ¼нҳת⣬ԼContext.ApplicationInstance == nullȷǰ
> ǷЧĹġ
>
> ʵ£
> void Application_Error(object sender, EventArgs e)
> {
> if(Context.ApplicationInstance != null)
> Context.Server.Transfer("~/errorinfo.aspx");
> else
> Context.Response.Redirect("~/errorinfo.aspx");
> }
>
> ϣܹһЩ
>
> Jasson Wang
> ֹ֧ʦ
> ȫ֧
> ---------------------------------------------------------------------------------------
> ǵķʱ䣺һ9:00-18:00ڼճ⣩ǽգ48СʱṩʼӦһо⡣鼼֧Ϣʣhttp://support.microsoft.com/gp/newsgroupsupport/zh-cn.
>
> ʱĶʹáظ(Reply to Group)⽫ûл档
> ---------------------------------------------------------------------------------------
> ԡ״ṩûκεͬʱҲûκȨ
chequan
03-30-2007, 03:26 PM
谢谢!
我试了下,在重载的 HttpApplication.Init() 方法中就可以用。
我想知道一下 HttpApplication.Init() 和 Application_Start 有什么区别?能解释一下吗?谢谢!
“he.d.d.shan”编写:
> 这个时候都没有用户Content,怎么可能执行System.Web.HttpServerUtility.Transfer。
>
> 你要执行这个东东,必须要有用户上下文,也就是说Page.Context(或者Application.Context)必须不为null。
>
> 这样的代码:
> void Application_Error(object sender, EventArgs e)
> {
> if(Context.ApplicationInstance != null)
> Context.Server.Transfer("~/errorinfo.aspx");
> else
> Context.Response.Redirect("~/errorinfo.aspx");
> }
> 也可能出错,Context本身就可能是null,当非用户上下文的代码执行出现异常的时候就可能发生。
>
>
>
>
> <v-jicwan@prcvap.microsoft.com> 写入消息
> news:1c2547bc-c09c-43b8-803d-660ab830a4f2@ms.shabap01.publicpsswebcat...
> > 您好:
> >
> > 欢迎您到MSDN新闻组提交问题,我们将会尽力帮助您。
> >
> > Application_Start和Application_End是两个特殊的事件处理器,他们与ASP.NET请求管道相关联,对于Application_Start中发生的异常会在Application_Error中捕获,因为在Application_Start中应用实例还没有创建完成,Server.Transfer是无法工作的。Server.Transfer适用于请求上下文中的页面转向,您可以使用Response.Redirect.在Application_Start事件处理器中进行页面转向。此外,您可以检查Context.ApplicationInstance == null来确定当前的请求上下
> > 文是否是有效的工作者请求上下文。
> >
> > 错误处理实例代码如下:
> > void Application_Error(object sender, EventArgs e)
> > {
> > if(Context.ApplicationInstance != null)
> > Context.Server.Transfer("~/errorinfo.aspx");
> > else
> > Context.Response.Redirect("~/errorinfo.aspx");
> > }
> >
> > 希望上述解释能够给您一些帮助。
> >
> > Jasson Wang
> > 在线技术支持工程师
> > 微软全球技术支持中心
> > ---------------------------------------------------------------------------------------
> > 我们的服务时间:周一至周五9:00-18:00(节假日除外)。我们将在两个工作日(48小时)内提供初始回应,并和您一起研究并解决问题。更多微软新闻组技术支持信息,请访问:http://support.microsoft.com/gp/newsgroupsupport/zh-cn.
> >
> > 回帖时,请在您的新闻组阅读器中使用“回复组(Reply to Group)”,这将帮助其他用户从您的提问中获益。
> > ---------------------------------------------------------------------------------------
> > 本贴子以”现状”提供且没有任何担保,同时也没有授予任何权利。
>
>
>
v-jicwan@prcvap.microsoft.com
04-02-2007, 03:35 AM
ã
Applicaton_StartHttpApplication.Init()οͣ
ڵһASP.NETбáApplication_Start нᱻһΡִһЩʱijʼIJ磬ݵͳʼ̬ԱҪעǣнþֵֵֻ̬ԸHttpApplicationʵɼ
HttpApplication.InitҪģ鴴ÿһHttpApplication ʵһΡ
ϣܹһЩ
Jasson Wang
ֹ֧ʦ
ȫ֧
---------------------------------------------------------------------------------------
ǵķʱ䣺һ9:00-18:00ڼճ⣩ǽգ48СʱṩʼӦһо⡣鼼֧Ϣʣhttp://support.microsoft.com/gp/newsgroupsupport/zh-cn.
ʱĶʹáظ(Reply to Group)⽫ûл档
---------------------------------------------------------------------------------------
ԡ״ṩûκεͬʱҲûκȨ
chequan
04-03-2007, 04:42 AM
你好!你好像说得不对,这个时候已经有Context了。我用Reflector.exe查看.NET源码,在Application_Start时就已经有了Context了。只是这个时候ApplicationInstance还没有。所以,我得认为是
Jasson Wang
说的是对的。应该判断Context.ApplicationInstance是否为空。而Context在任何时候都是存在的,无需判断,对吧?
如果你认为Context不存在,能否举个例子,说说哪个时候Context不存在,谢谢!
“he.d.d.shan”编写:
> 这个时候都没有用户Content,怎么可能执行System.Web.HttpServerUtility.Transfer。
>
> 你要执行这个东东,必须要有用户上下文,也就是说Page.Context(或者Application.Context)必须不为null。
>
> 这样的代码:
> void Application_Error(object sender, EventArgs e)
> {
> if(Context.ApplicationInstance != null)
> Context.Server.Transfer("~/errorinfo.aspx");
> else
> Context.Response.Redirect("~/errorinfo.aspx");
> }
> 也可能出错,Context本身就可能是null,当非用户上下文的代码执行出现异常的时候就可能发生。
>
>
>
>
> <v-jicwan@prcvap.microsoft.com> 写入消息
> news:1c2547bc-c09c-43b8-803d-660ab830a4f2@ms.shabap01.publicpsswebcat...
> > 您好:
> >
> > 欢迎您到MSDN新闻组提交问题,我们将会尽力帮助您。
> >
> > Application_Start和Application_End是两个特殊的事件处理器,他们与ASP.NET请求管道相关联,对于Application_Start中发生的异常会在Application_Error中捕获,因为在Application_Start中应用实例还没有创建完成,Server.Transfer是无法工作的。Server.Transfer适用于请求上下文中的页面转向,您可以使用Response.Redirect.在Application_Start事件处理器中进行页面转向。此外,您可以检查Context.ApplicationInstance == null来确定当前的请求上下
> > 文是否是有效的工作者请求上下文。
> >
> > 错误处理实例代码如下:
> > void Application_Error(object sender, EventArgs e)
> > {
> > if(Context.ApplicationInstance != null)
> > Context.Server.Transfer("~/errorinfo.aspx");
> > else
> > Context.Response.Redirect("~/errorinfo.aspx");
> > }
> >
> > 希望上述解释能够给您一些帮助。
> >
> > Jasson Wang
> > 在线技术支持工程师
> > 微软全球技术支持中心
> > ---------------------------------------------------------------------------------------
> > 我们的服务时间:周一至周五9:00-18:00(节假日除外)。我们将在两个工作日(48小时)内提供初始回应,并和您一起研究并解决问题。更多微软新闻组技术支持信息,请访问:http://support.microsoft.com/gp/newsgroupsupport/zh-cn.
> >
> > 回帖时,请在您的新闻组阅读器中使用“回复组(Reply to Group)”,这将帮助其他用户从您的提问中获益。
> > ---------------------------------------------------------------------------------------
> > 本贴子以”现状”提供且没有任何担保,同时也没有授予任何权利。
>
>
>
chequan
04-03-2007, 05:48 AM
Jasson Wang,你好!
你看了一些你给的资料,总结出这样一个结论,你看对吗:
在 Application 的一些事件处理中,比如:Application_Start、Application_BeginRequest
等等,这个时候还没有进入具体的页面处理程序,这时Context.CurrentHandler ==
null,所以在这个时候要跳转页面可以采用Context.RewritePath方法。
而在具体的页面处理程序中,这时Context.CurrentHandler !=
null,所以这就应该用Context.Server.Transfer方法了,你看这样做对吗?谢谢你!
“v-jicwan@prcvap.microsoft.com”编写:
> 您好:
>
> 关于Applicaton_Start与HttpApplication.Init()方法的区别,请参考下述解释:
>
> 在第一次ASP.NET的请求中被调用。Application_Start 在整个程序运行周期中仅仅会被调用一次。可以在这个方法中执行一些启动时的初始化的操作,比如,载入数据到缓存和初始化静态成员变量。需要注意的是,在这个方法中仅仅设置静态变量的值,否则变量的值只对该HttpApplication实例可见。
>
> HttpApplication.Init在所用需要的模块创建后,对每一个HttpApplication 实例都会调用一次。
>
> 希望上述解释能够给您一些帮助。
>
> Jasson Wang
> 在线技术支持工程师
> 微软全球技术支持中心
> ---------------------------------------------------------------------------------------
> 我们的服务时间:周一至周五9:00-18:00(节假日除外)。我们将在两个工作日(48小时)内提供初始回应,并和您一起研究并解决问题。更多微软新闻组技术支持信息,请访问:http://support.microsoft.com/gp/newsgroupsupport/zh-cn.
>
> 回帖时,请在您的新闻组阅读器中使用“回复组(Reply to Group)”,这将帮助其他用户从您的提问中获益。
> ---------------------------------------------------------------------------------------
> 本贴子以”现状”提供且没有任何担保,同时也没有授予任何权利。
v-jicwan@prcvap.microsoft.com
04-03-2007, 06:22 AM
ã
ллķһͬĹ۵㡣
ͨ System.Web.HttpContext RewritePath() ASP.NET ʵ URL дHttpContext йض HTTP HTTP ضϢ ASP.NET յÿΪһ HttpContext ʵ
Jasson Wang
ֹ֧ʦ
ȫ֧
---------------------------------------------------------------------------------------
ǵķʱ䣺һ9:00-18:00ڼճ⣩ǽգ48СʱṩʼӦһо⡣鼼֧Ϣʣhttp://support.microsoft.com/gp/newsgroupsupport/zh-cn.
ʱĶʹáظ(Reply to Group)⽫ûл档
---------------------------------------------------------------------------------------
ԡ״ṩûκεͬʱҲûκȨ