问题标签 [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.

0 投票
2 回答
1845 浏览

.net - .net Url 重写本地化,表单身份验证和 loginUrl 问题

我正在使用 HttpModule 重写多语言网站上的网址。在 HttpModule 中,我为 BeginRequest 事件添加了一个处理程序,并寻找包含文化名称的路径的第一部分。

例如,/fr-ca/index.aspx 将被重写为 /index.aspx 并将线程的文化和 ui 文化设置为 3084。这工作正常。

输入表单身份验证。表单身份验证仍然适用于未映射的 url,但如果用户未经授权,它将重定向到 web.config 的身份验证部分中设置的 loginUrl,并包含 ?ReturnUrl= 查询字符串参数以处理重定向回请求的用户通过身份验证后的页面。

如果用户请求使用非默认语言的页面,这里有两个问题:

  1. loginUrl 在重写之前忽略路径
  2. ReturnUrl 参数也忽略了原始路径。

它等效于 Request.Url.PathAndQuery 而不是 Request.RawUrl。

我不能在 AuthorizeRequest 事件中跳入管道,因为那时我必须防止所有可能的文化值,因为我正在使用一个具有多个位置路径的 web.config 文件。这也不能解决第一个问题。

我已经浏览了反射器中的 FormsAuthenticationModule,我看到了可以在哪里更改它以解决 #1 和 #2,但它当然是密封的。

我也浏览了很多,但我看不到任何可行的解决方案。

FormsAuthenticationModule 正在检查 UrlAuthorizationModule 中生成的 401 标头。如果您在 loginUrl 页面上查找引荐来源网址(为空),它会确认这一点。

有什么想法吗?

编辑#1

我正在使用 IIS 6,而 IIS 7 不是一个选项。

编辑#2

登录页面没有选择默认的文化/用户界面文化,因为当我生成本地资源(设计视图:工具 > 生成本地资源)时,IDE 将以下内容添加到页面指令中:

文化=“自动”元:资源键=“页面资源1”uiculture=“汽车”

在 vs.net 2008 中注意这一点!至少这解决了未引用默认文化的问题之一,但 #1 和 #2 仍然很突出。

编辑 3

我希望我可以跳入其中一个管道事件来进行自己的重定向,但是在反映 System.Web.Security.UrlAuthorizationModule OnEnter 方法中,我了解到一旦设置了 401 标头,该方法就会调用 application.CompleteRequest,它正如您所猜到的,将我们带到 EndRequest 事件。这就是FA模块跳进做重定向的东西,我怕跳到前面做自己的重定向!我很惊讶没有更多的人遇到这个问题,或者他们可能还没有加入。


例子:

我在受表单身份验证保护的物理文件夹 /members/ 中有一个成员部分。

在 web.config 中,我有:

和...

当未经身份验证的用户请求 /members/ 的索引页面时,他们会被 FormsAuthenticationModule 从上面的身份验证部分重定向到 loginUrl。它还将 ?ReturnUrl 参数附加到请求的页面。

如果用户使用默认文化浏览网站,这很好用,但我的 HttpModule 根据路径第一部分中存在的文化名称设置文化。

因此,/fr-ca/members/index.aspx 被重写为 /members/index.aspx 并将文化/ui 文化设置为加拿大法语。不幸的是,FormsAuthenticationModule 使用重写的 url 将用户发送到 loginUrl 页面,而不是原来的。因此,文化设置丢失并且重定向 url 不正确。

希望对@Greg有帮助

0 投票
2 回答
994 浏览

asp.net - 如果没有查询字符串,是否可以跳过 HttpHandler?

我写了一个动态图像缩放器作为 HttpHandler。它会自动调用任何带有图像扩展名的东西,例如:

http://www.mysite.com/picture.jpg?width=200&height=100

将运行处理程序并返回带有正确响应标头的缩略图。但是,如果在没有查询字符串的情况下调用请求,我希望处理程序让请求“通过”:

http://www.mysite.com/picture.jpg

我希望它返回带有标题信息的图像,就像它没有通过处理程序运行它一样。这是否可能无需手动编码标头信息(这涉及打开文件流以读取数据,例如上次写入日期),还是我必须将我的处理程序转换为 a HTTPModule

0 投票
3 回答
8883 浏览

configuration - BUG:IIS7 托管请求

我不知道我是否也应该将这个问题发布到 ServerFault,因为它是关于 IIS 配置的?

在 IIS7 中,我们可以通过以下方式告诉模块为托管内容运行(从而加速静态内容服务):

但。只要请求的 URL 中还有一个文件名(带扩展名),它就可以正常工作。如果省略它,IIS7 会认为您需要静态内容,并且托管模块将不会运行。

如果我手动设置 IIS7 默认文件,所以第一个是default.aspx我可以看到没有区别没有区别。对我来说,这看起来、走路和听起来都像是一只虫子。这是一个错误!为什么?因为当我请求第一个请求时,它是一个托管请求,不是吗。当然是的。但 IIS7 将其视为静态请求。所以?这是一个错误。此请求应被视为受管理的。

如何说服 IIS7 为没有文件名的 URL 请求运行托管处理程序?

帮助思考

让我帮你思考一下:如果我重新排序system.webServer/handlers,我肯定可以解决这个问题。StaticFile在指向 的最后一个处理程序之前,StaticFileModule我应该在目录请求上运行集成的 asp.net 处理程序。或者编写我自己的处理程序,它将默认文档附加到任何目录请求。我很确定其中之一应该可以解决它。但是我将如何配置/开发它?DefaultDocumentModuleDirectoryBrowsingModule

0 投票
2 回答
2221 浏览

c# - C# ASP.NET HttpModules:HttpApplication 事件

我的 Web 应用程序中有一个 HttpApplication (Global.asax),我使用它来捕获和记录未处理的异常并设置 WebFormURLRouting。这一切都有效,但是我想将此代码移动到我的应用程序框架中(即不在 Global.asax.cs 中)

我刚刚尝试在框架中创建一个 HttpApplication 类,但似乎我无法覆盖事件?无论如何,我相信我可以使用 HttpModule 来使用这些事件,这样做:

1) 完全消除对 Global.asax 的需求?

2)这种影响如何扩大,即最终在网络农场上运行应用程序

3) 我有 HttpHandlers 来处理文件上传和文件下载等其他事情,是否应该使用多少个 HttpModule/HttpHandlers 或者应该以某种方式组合这些以减少开销?

任何意见表示赞赏

0 投票
2 回答
2118 浏览

c# - HttpResponse 过滤器不返回任何内容

我编写了一个 HttpModule,用于拦截 WebResource.axd 处理程序的调用,因此我可以对 javascript 执行一些后期处理。

该模块包装 Response.Filter 流以执行其处理并将其更改写入底层流。

我遇到的问题是脚本没有返回到浏览器。

因此,作为一个非常简单的示例,该模块仅用作传递,模块如下所示:

和仅输出它接收到的内容的 ResourceFilter 如下所示:

我可以附加并查看正在调用的模块和过滤器,但是当我浏览到 WebResource.axd url 时,我什么也得不到。

我已经使用这种模式来实现在 aspx 页面上执行处理的模块,它们工作得很好。似乎与 WebResource.axd 的交互有一些东西阻止了这种工作。

0 投票
2 回答
1269 浏览

asp.net - 静态文件的 HTTPModule 有时无法在 IIS 6 上运行

我有一个 HTTP 模块,可以根据它们的内容类型标头清理、压缩和缩小 CSS、JS 和 HTML 文件。它在我的暂存环境和本地主机(ISS7,经典管道模式)中运行良好。在 IIS 6(生产)上,它不可靠。偶尔,asp.net 会停止处理此静态文件,并且似乎正在恢复为默认的 IIS 处理程序。如果我触摸 web.config 或执行 IISRESET,它将再次开始正常工作一段时间。即使模块进入这种“古怪状态”,.aspx 文件仍按预期在模块中运行。所以,我相当确定模块不是问题,我们正在查看的是 IIS 问题。

  1. 我在 IIS 6 中映射了 HTML、JS 和 CSS 文件,由 aspnet_isapi.dll 处理所有动词。
  2. 在我的 web.config 中,我已将这些静态文件设置为由处理程序部分中的 System.Web.StaticFileHandler 处理,也适用于所有动词。
  3. HTTP 模块也连接在 web.config 中。

有任何想法吗?我想暂时避免将我的生产 Web 服务器升级到 IIS 7!

0 投票
2 回答
11103 浏览

asp.net - HttpModule 中的 Response.Redirect

我可以重定向到 HttpModule 中的自定义页面吗?

我有一个 HttpModule A,它在加载任何 aspx 页面时执行一些 javascript 代码。我想要一个服务器端代码检查客户端浏览器是否支持cookies。我可以将该代码放在 HttpModule A 中吗?如果是这样,在什么情况下?或者我是否需要一个新的 HttpHandler 来实现这两个目的?

此外,是否可以检查 HttpModule 中的 cookie(没有 response.redirect)?我见过的所有解决方案都需要 2 个页面,1 个用于设置 cookie,另一个用于检查 cookie 是否已实际创建。我希望应该有一种方法可以在一个地方检查 cookie。

提前致谢

0 投票
1 回答
725 浏览

c# - 使用 HttpModule 的非本地网络请求需要 IIS 中的客户端证书

对于任何不是来自本地网络的请求,我需要在 IIS 的站点上要求客户端证书。任何本地请求都不应要求客户端证书。有没有办法在 IIS 中做到这一点?我正在考虑将 IIS 配置为允许客户端证书但不需要它们,然后使用自定义 HttpModule 来检查原始 IP 地址并回退任何不来自本地网络且不包含客户端证书的内容。

那会奏效吗?你会如何解决这个问题?

0 投票
2 回答
8575 浏览

c# - 如何从 HttpModule 中检索响应 html?

这是我特别想做的事情:

我写了一个 HttpModule 来做一些特定于站点的跟踪。我们网站上的一些旧 .aspx 页面是硬编码的,没有真正的控件,但它们是 .aspx 文件,因此我的模块在请求时仍会运行。

我的模块的处理程序附加到 PostRequestHandlerExecute,所以我相信应该已经确定了将发送回请求者的内容。

我需要能够提取标题标签中的任何字符串。

因此,如果

在最终呈现的 HTML 中发送给请求者。然后我想要“大块培根”。

想法?

0 投票
1 回答
2536 浏览

c# - 自定义 C# HttpModule 无限重定向循环

我正在编写一个自定义的 c# HttpModule,它将处理来自所有文件类型的请求。作为一个简单的概念证明,我通过添加对 web 配置的 httpModules 部分的引用来设置模块,并为演示 IIS 网站添加了应用程序扩展,并引用了 aspnet_isapi.dll,因此它目前只拦截对“. htm”文件

但即使“OnBeginRequest”事件(下面的代码)中没有重要代码,它也会导致无限重定向循环。我在 XP 上使用 IIS 5 有人知道吗?

到目前为止,我只看到了与 ASPX 文件一起使用的 HttpModule 示例,但您肯定可以为任何文件类型配置吗?