ASP.NET路由 - 自定义路由完全跳过Global.asax中的所有内容吗?

时间:2008-12-30 13:20:34

标签: asp.net webforms routing

我有一个简单的ASP.NET 3.5 SP1 Web窗体应用程序...我添加了System.Web.Routing DLL,并且我做了一个简单的路由,返回标准的ASP.NET页面作为“IHttpHandler” ”

一切都很好......除了HttpContext.Current.User null ???

所以,我做了一些挖掘(我在Global.asax文件中的所有事件中放置了断点)。通常,这些断点会受到影响(当我导航到标准的“.aspx”页面时):

  • 的Application_BeginRequest
  • Application_AuthenticateRequest
  • Application_EndRequest

但是,当使用ASP.NET Routing时......这些事件都没有被触发。我错过了什么吗?

4 个答案:

答案 0 :(得分:7)

假设您正在使用IIS6,另一种方法是定义“通配符”扩展处理程序。将这个简单的“全部捕获”映射添加到IIS6将使其能够处理您的无扩展请求。默认情况下,.NET安装程序将“.aspx”映射到aspnet_isapi.dll,这就是.aspx扩展名的工作原理。要将没有扩展名的请求映射到APS.NET引擎,您必须告诉IIS查看每个请求

这是一篇解释过程的快速文章:

http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx

希望有助于减少网址的“蹩脚”因素。 :)

-Todd

答案 1 :(得分:2)

找到了奇怪和嘶哑(和愚蠢)的答案:)

如果你没有在你的路线末尾添加“.aspx”,那么Global.asax中没有任何内容,这意味着你没有得到任何BeginRequest,AuthenticateRequest,EndRequest等等。另外,你不要得到SessionState或任何东西。

所以,“修复”对我来说只是改变了我的路线:

RouteTable.Routes.Add("Blah", new Route("Blah/{reportName}", new MyHandler());

到此:

RouteTable.Routes.Add("Blah", new Route("Blah/{reportName}.aspx", new MyHandler());

多么完全蹩脚:) ...但这是一个非常简单的修复!

答案 2 :(得分:0)

当你说

“如果你没有在你的路线末尾添加”.aspx“,那么Global.asax中没有任何内容,这意味着你没有得到任何BeginRequest,AuthenticateRequest,EndRequest等等。另外,你不要得到SessionState或任何东西。“

IIS会在日志文件中记录此类请求,还是只是匿名?应用程序变量和ViewState怎么样?

抱歉,我还没有测试过,但只是问你是否已经知道了?

答案 3 :(得分:0)

我检查了应用程序变量和Viewstate,这两个显然正在工作..不确定服务器日志:S