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

一切都很好...除了 HttpContext.Current.User 是 无效的 ???

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

  • 应用程序_开始请求
  • 应用程序_AuthenticateRequest
  • 应用程序_结束请求

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

有帮助吗?

解决方案

假设您使用的是 IIS6,另一种方法是定义“通配符”扩展处理程序。将这个简单的“catch all”映射添加到 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

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

-托德

其他提示

找到了奇怪和奇怪(而且愚蠢)的答案:)

如果您不将“.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());

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

当你说

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top