2

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

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

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

  • Application_BeginRequest
  • Application_AuthenticateRequest
  • Application_EndRequest

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

4

4 回答 4

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

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

-托德

于 2009-01-12T19:36:26.950 回答
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());

多么蹩脚:) ...但它仍然是一个修复!

于 2008-12-30T13:51:52.880 回答
0

当你说

“如果您不将“.aspx”添加到您的路线末尾,则 Global.asax 中不会触发任何内容,这意味着您不会收到任何 BeginRequest、AuthenticateRequest、EndRequest 等……此外,您不会得到会话状态或任何东西。”

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

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

于 2009-04-17T09:50:16.533 回答
0

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

于 2009-04-17T10:56:17.763 回答