问题标签 [httpmodule]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 为什么 HttpContext.Current.Handler 为空?
我正在尝试访问 HttpModule 中的页面,我认为我应该通过调用 HttpContext.Current.Handler 来做到这一点(这应该引用当前页面),但我一直在获取 null。
我正在使用 .Net 3.5 框架进行开发。
我正在检查 AuthorizeRequest 和 AuthenticateRequest
谢谢。
asp.net - 使用 HttpModule 跨请求缓存
我编写了一个 HttpModule 接受请求,处理它(通过数据库查找),并将结果(html)输出回响应。(注意,HttpModule实际上是在请求完成之后才结束请求,所以没有正常的ASP.NET处理请求。)
由于数据库查找可能很昂贵/耗时,我想将结果存储在内存中,以便后续(相同)请求可以在不进入数据库的情况下提供相同的内容。
我可以在哪里存储(内存中)数据,以便它可用于 HttpModule 的后续调用?
c# - 多次调用 HttpModule Init 方法 - 为什么?
我正在创建一个 http 模块,在调试时我注意到一些起初(至少)看起来很奇怪的行为。
当我在 httpmodule 的 init 方法中设置断点时,我可以看到http 模块的 init 方法被调用了几次,即使我只是启动了网站进行调试并发出了一个请求(有时它只被命中 1 次, 其他次数多达 10 次)。
我知道我应该期望HttpApplication的多个实例正在运行,并且将为每个实例创建 http 模块,但是当我请求单个页面时,它应该由单个 http 应用程序对象处理,因此只触发一次关联的事件,但它仍然为每个请求触发事件多次,这是没有意义的 - 除了它必须在该httpApplication中添加多次- 这意味着它是每次调用的相同httpmodule init 方法,而不是新的 http 应用程序每次遇到断点时都会创建(请参阅底部的代码示例等)。
这里可能出了什么问题?是不是因为我在调试,在http模块中设置了断点?
它已经注意到,如果我启动网站进行调试并快速越过 httpmodule 中的断点,它似乎只会命中一次init 方法,而eventhandler也是如此。如果我改为让它在断点处挂起几秒钟,则会多次调用init 方法(似乎这取决于我在跨过断点之前等待多长时间)。也许这可能是一些内置功能,以确保 httpmodule 已初始化并且 http 应用程序可以服务 requests ,但它似乎也可能产生灾难性后果。
这似乎是合乎逻辑的,因为它可能正在尝试完成请求,并且由于我设置了断点,它认为出现问题并尝试再次调用 init 方法?所以它可以处理请求吗?
但这是正在发生的事情,一切都很好(我只是在猜测),还是一个真正的问题?
我特别担心的是,如果某些东西使它在“生产/实时”服务器上挂起几秒钟,则会通过init添加许多事件处理程序,因此对页面的每个请求都会突然触发事件处理程序几次。
这种行为可能会迅速导致任何网站宕机。
我已经查看了用于表单身份验证的httpmodules和rolemanagermodule等的“原始”.net 代码......但是我的代码与这些模块使用的没有任何不同。
我的代码看起来像这样。
这是一个示例,它是如何在 .NET 框架的RoleManagerModule中完成的:
有谁知道发生了什么?
(我只是希望有人能告诉我为什么会这样,并向我保证一切都很好):)
更新:
我试图缩小问题的范围,到目前为止,我发现被调用的init方法总是在我的 http 模块的新对象上(与我之前的想法相反)。
我似乎对于第一个请求(启动站点时),所有正在创建的HttpApplication对象及其模块都在尝试为第一个请求提供服务,因此都命中了正在添加的事件处理程序。我真的不明白为什么会这样。
如果我请求另一个页面,所有创建的HttpApplication(及其模块)将再次尝试服务请求,导致它多次命中事件处理程序。
但似乎如果我然后跳回第一页(或另一页),只有一个HttpApplication将开始处理请求并且一切都按预期进行 - 只要我不让它在断点处挂起.
如果我让它挂在断点上,它会开始创建新的HttpApplication对象并开始添加HttpApplications(超过 1 个)来服务/处理请求(该请求已经在由当前停止在断点)。
我猜想或希望它可能是一些智能的“幕后”方式来帮助分配和处理负载和/或错误。但我不知道。我希望那里的一些人可以向我保证它很好,它应该是怎样的?
c# - HttpModule 和静态类,多个请求是否共享相同的静态数据?
我已经编写了一个 ASP.NET HttpModule 并且我有一个静态帮助器类,用于在请求的生命周期内加载和存储配置数据。
由于静态构造函数必须是无参数的,我有一个静态 SetConfigName 方法,我在处理 HttpRequest 开始时调用它。
还有一些静态 Get() 方法,稍后会在处理 HttpRequest 期间调用。
每个请求加载的配置数据可能不同(基于 URL 中的值),因此我不希望其他请求在调用 SetConfigName 后共享静态数据。
那么问题来了,多个请求是否共享相同的静态数据,还是每个新请求都获得静态类的单独副本?(如果数据是共享的,如何避免它?是使它成为非静态类的唯一选择吗?)
(顺便说一句,我不使用 global.asax。)
asp.net-mvc - 排除 HttpModule 在 IIS7 上运行静态内容
我的身份验证 HttpModule 有问题。问题是它显然针对我在我的网络服务器(IIS7)上收到的每个请求运行。因为它也使用 Session 变量,所以它无法在 CSS、JS 文件和类似文件上正常工作。
我尝试使用:
但无济于事。它仍然在每个请求上运行,无论其扩展名或 mime 类型如何。我还应该补充一下,有一个设置
这对我来说似乎很可疑,实际上禁用了模块上的前置条件。但是将其更改为 false 会以完全不同的方式和不同的异常中断应用程序(SessionStateTempDataProvider 需要启用 SessionState)。
当请求静态内容文件时,任何人都可以帮助我如何强制 IIS7 排除我的 HttpModule 吗?
asp.net-mvc - 配置托管模块的 Asp.net MVC 错误
我有一个HttpModule
非常严格的自定义身份验证。但我希望它只为托管请求运行(而不是静态请求)。
Asp.net MVC 自动为 IIS7 Web 服务器添加配置部分:
当我添加我自己的模块时,我也设置了它preCondition="managedHandler"
,但是由于runAllManagedModulesForAllRequests="true"
在父<module>
元素上有我preCondition
被设计忽略(正如我在 MSDN 上阅读的那样)。
当我尝试设置时:
我得到一个错误。
我还必须设置什么(哪个其他模块)web.config
才能使此设置起作用:
c# - HttpModule/HttpApplication 测试url是否为文件请求
在 HttpModule 中,我想检查 url 是否以文件结尾:
IE。www.example.com/images/images.css
以及文件扩展名是什么,即。css 或 js
在 Begin_Request 事件处理程序中,使用嵌套在 HttpApplication 中的 Request 对象的 Url 属性,我目前正在使用字符串操作切割文件扩展名。有一个更好的方法吗?
c# - Asp.Net 认证模块
我在 ASP.Net 中创建了一个身份验证模块,但如果资源配置为匿名访问,我不希望执行身份验证模块中的逻辑,因为该逻辑很昂贵。
需要认证的页面与不需要认证的页面位于同一目录中。我无法控制这一点。是否有一种简单的方法可以确定资源配置为在 URLAuthorizationModule 之前允许匿名访问?
目前,我正在做以下“感觉”正确的事情。任何帮助,将不胜感激。
c# - Global.asax 问题
我正在开发一个 HttpModule 并使用 Global.asax。我开发了一个派生自 HttpApplication 的类,但我的类的 Application_Start 方法从不执行(我在 Application_Start 的开头创建了一个文件,但该文件从不创建,这就是我认为 Application_Start 从不执行的原因)。我正在使用 VSTS2008 + C# + .Net 3.5。
任何想法有什么问题以及如何调试?我想确认我应该将 Global.asax 复制到我的网站虚拟目录的根目录中,对吗?我应该在 web.config 中配置任何内容以让 HttpModule 运行吗?
events - 与提供者打交道时要在 HttpModule 中处理哪个事件来设置当前主体?
我面临一个问题,我必须与自定义 HttpModule 集成,其中在当前线程上设置主体和身份,以便 HttpContext.Current.User 包含这些。但是我觉得他们使用的事件处理程序(PostAcquireRequestState)为时已晚。
在 HttpModule 中发生提供程序初始化之前,最好处理的事件是什么?我想要的只是我的自定义提供程序以使用正确的主体和身份。