是否无法检测当前请求是否通过ASP.NET 4.0 URL路由进行映射?
我有一个处理应用程序BeginRequest
事件的HTTP模块。我发现这个处理程序是针对所有文件类型调用的,包括CSS,JS,图像文件等,如果目标文件是ASPX页面,我只想执行一个动作。
对于路由页面,HttpRequest
对象的所有属性都反映了请求的URL,而不是请求映射到的ASPX页面。如何确定请求是否由ASPX文件处理?
感谢您的任何建议。
答案 0 :(得分:1)
您可以创建一个BasePage作为应用程序中所有页面的基类,并在那里处理Page_Load事件而不是使用HTTP模块。
答案 1 :(得分:1)
在Begin Request事件内部,尚未为特定URL定义处理程序。
因此,无法确定实际最终会处理该URL的内容,因为IIS尚未决定。在触发Begin Request之后会发生这种情况,这就是为什么要调用所有文件类型的原因。
这就是为什么Begin Request不是真正执行需要专门针对.NET文件的代码的好事件之一。 Begin Request方法的一个很好用途是向请求或响应添加cookie或标头。无论最终处理请求是什么,都可以毫无问题地加以解决。
如前所述,我建议从所有其他页面继承的System.Web.UI.Page继承的基类,或创建母版页。
现在没有特别知道你想要做什么,很难给出一个好的解决方案。可以测试URL以检查它是否会被Route触发,但我不知道当你可以通过基类或母版页处理它时它是怎么看起来也是如此。