问题标签 [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 - .net Url 重写本地化,表单身份验证和 loginUrl 问题
我正在使用 HttpModule 重写多语言网站上的网址。在 HttpModule 中,我为 BeginRequest 事件添加了一个处理程序,并寻找包含文化名称的路径的第一部分。
例如,/fr-ca/index.aspx 将被重写为 /index.aspx 并将线程的文化和 ui 文化设置为 3084。这工作正常。
输入表单身份验证。表单身份验证仍然适用于未映射的 url,但如果用户未经授权,它将重定向到 web.config 的身份验证部分中设置的 loginUrl,并包含 ?ReturnUrl= 查询字符串参数以处理重定向回请求的用户通过身份验证后的页面。
如果用户请求使用非默认语言的页面,这里有两个问题:
- loginUrl 在重写之前忽略路径
- 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有帮助
asp.net - 如果没有查询字符串,是否可以跳过 HttpHandler?
我写了一个动态图像缩放器作为 HttpHandler。它会自动调用任何带有图像扩展名的东西,例如:
http://www.mysite.com/picture.jpg?width=200&height=100
将运行处理程序并返回带有正确响应标头的缩略图。但是,如果在没有查询字符串的情况下调用请求,我希望处理程序让请求“通过”:
http://www.mysite.com/picture.jpg
我希望它返回带有标题信息的图像,就像它没有通过处理程序运行它一样。这是否可能无需手动编码标头信息(这涉及打开文件流以读取数据,例如上次写入日期),还是我必须将我的处理程序转换为 a HTTPModule
?
configuration - BUG:IIS7 托管请求
(我不知道我是否也应该将这个问题发布到 ServerFault,因为它是关于 IIS 配置的?)
在 IIS7 中,我们可以通过以下方式告诉模块为托管内容运行(从而加速静态内容服务):
但。只要请求的 URL 中还有一个文件名(带扩展名),它就可以正常工作。如果省略它,IIS7 会认为您需要静态内容,并且托管模块将不会运行。
如果我手动设置 IIS7 默认文件,所以第一个是default.aspx
,我可以看到没有区别没有区别。对我来说,这看起来、走路和听起来都像是一只虫子。这是一个错误!为什么?因为当我请求第一个请求时,它是一个托管请求,不是吗。当然是的。但 IIS7 将其视为静态请求。所以?这是一个错误。此请求应被视为受管理的。
如何说服 IIS7 为没有文件名的 URL 请求运行托管处理程序?
帮助思考
让我帮你思考一下:如果我重新排序system.webServer/handlers
,我肯定可以解决这个问题。StaticFile
在指向 的最后一个处理程序之前,StaticFileModule
我应该在目录请求上运行集成的 asp.net 处理程序。或者编写我自己的处理程序,它将默认文档附加到任何目录请求。我很确定其中之一应该可以解决它。但是我将如何配置/开发它?DefaultDocumentModule
DirectoryBrowsingModule
c# - C# ASP.NET HttpModules:HttpApplication 事件
我的 Web 应用程序中有一个 HttpApplication (Global.asax),我使用它来捕获和记录未处理的异常并设置 WebFormURLRouting。这一切都有效,但是我想将此代码移动到我的应用程序框架中(即不在 Global.asax.cs 中)
我刚刚尝试在框架中创建一个 HttpApplication 类,但似乎我无法覆盖事件?无论如何,我相信我可以使用 HttpModule 来使用这些事件,这样做:
1) 完全消除对 Global.asax 的需求?
2)这种影响如何扩大,即最终在网络农场上运行应用程序
3) 我有 HttpHandlers 来处理文件上传和文件下载等其他事情,是否应该使用多少个 HttpModule/HttpHandlers 或者应该以某种方式组合这些以减少开销?
任何意见表示赞赏
c# - HttpResponse 过滤器不返回任何内容
我编写了一个 HttpModule,用于拦截 WebResource.axd 处理程序的调用,因此我可以对 javascript 执行一些后期处理。
该模块包装 Response.Filter 流以执行其处理并将其更改写入底层流。
我遇到的问题是脚本没有返回到浏览器。
因此,作为一个非常简单的示例,该模块仅用作传递,模块如下所示:
和仅输出它接收到的内容的 ResourceFilter 如下所示:
我可以附加并查看正在调用的模块和过滤器,但是当我浏览到 WebResource.axd url 时,我什么也得不到。
我已经使用这种模式来实现在 aspx 页面上执行处理的模块,它们工作得很好。似乎与 WebResource.axd 的交互有一些东西阻止了这种工作。
asp.net - 静态文件的 HTTPModule 有时无法在 IIS 6 上运行
我有一个 HTTP 模块,可以根据它们的内容类型标头清理、压缩和缩小 CSS、JS 和 HTML 文件。它在我的暂存环境和本地主机(ISS7,经典管道模式)中运行良好。在 IIS 6(生产)上,它不可靠。偶尔,asp.net 会停止处理此静态文件,并且似乎正在恢复为默认的 IIS 处理程序。如果我触摸 web.config 或执行 IISRESET,它将再次开始正常工作一段时间。即使模块进入这种“古怪状态”,.aspx 文件仍按预期在模块中运行。所以,我相当确定模块不是问题,我们正在查看的是 IIS 问题。
- 我在 IIS 6 中映射了 HTML、JS 和 CSS 文件,由 aspnet_isapi.dll 处理所有动词。
- 在我的 web.config 中,我已将这些静态文件设置为由处理程序部分中的 System.Web.StaticFileHandler 处理,也适用于所有动词。
- HTTP 模块也连接在 web.config 中。
有任何想法吗?我想暂时避免将我的生产 Web 服务器升级到 IIS 7!
asp.net - HttpModule 中的 Response.Redirect
我可以重定向到 HttpModule 中的自定义页面吗?
我有一个 HttpModule A,它在加载任何 aspx 页面时执行一些 javascript 代码。我想要一个服务器端代码检查客户端浏览器是否支持cookies。我可以将该代码放在 HttpModule A 中吗?如果是这样,在什么情况下?或者我是否需要一个新的 HttpHandler 来实现这两个目的?
此外,是否可以检查 HttpModule 中的 cookie(没有 response.redirect)?我见过的所有解决方案都需要 2 个页面,1 个用于设置 cookie,另一个用于检查 cookie 是否已实际创建。我希望应该有一种方法可以在一个地方检查 cookie。
提前致谢
c# - 使用 HttpModule 的非本地网络请求需要 IIS 中的客户端证书
对于任何不是来自本地网络的请求,我需要在 IIS 的站点上要求客户端证书。任何本地请求都不应要求客户端证书。有没有办法在 IIS 中做到这一点?我正在考虑将 IIS 配置为允许客户端证书但不需要它们,然后使用自定义 HttpModule 来检查原始 IP 地址并回退任何不来自本地网络且不包含客户端证书的内容。
那会奏效吗?你会如何解决这个问题?
c# - 如何从 HttpModule 中检索响应 html?
这是我特别想做的事情:
我写了一个 HttpModule 来做一些特定于站点的跟踪。我们网站上的一些旧 .aspx 页面是硬编码的,没有真正的控件,但它们是 .aspx 文件,因此我的模块在请求时仍会运行。
我的模块的处理程序附加到 PostRequestHandlerExecute,所以我相信应该已经确定了将发送回请求者的内容。
我需要能够提取标题标签中的任何字符串。
因此,如果
在最终呈现的 HTML 中发送给请求者。然后我想要“大块培根”。
想法?
c# - 自定义 C# HttpModule 无限重定向循环
我正在编写一个自定义的 c# HttpModule,它将处理来自所有文件类型的请求。作为一个简单的概念证明,我通过添加对 web 配置的 httpModules 部分的引用来设置模块,并为演示 IIS 网站添加了应用程序扩展,并引用了 aspnet_isapi.dll,因此它目前只拦截对“. htm”文件
但即使“OnBeginRequest”事件(下面的代码)中没有重要代码,它也会导致无限重定向循环。我在 XP 上使用 IIS 5 有人知道吗?
到目前为止,我只看到了与 ASPX 文件一起使用的 HttpModule 示例,但您肯定可以为任何文件类型配置吗?