gpt4 book ai didi

c# - 可以在 IIS 中对静态 html 页面进行后处理吗?

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:09 26 4
gpt4 key购买 nike

有一个 WebForms 项目,有一堆 aspx 和 html 页面。我想以类似于 here 的类似方式对要在 HttpModule 中呈现的 html 标记进行后处理.对于有效的 aspx 页面。

但是,对于 html 页面,当我尝试从 Request.InputStream 读取时,它是空的,Request.InputStream.Length 等于 0。我做错了什么, 是否可以使用 ASP.NET 引擎动态更改 html 页面的标记?

背景信息:我想根据用户权限有条件地删除一些 html 元素。

更新:根据评论,我更新了 web.config 但无法获得所需的结果。当我点击/my.html 页面时,请求到达我的模块,我能够读取 cookie、 header ,但这不是我想要的。我想阅读 html 页面的内容并将更新版本写入 context.Response。为了以防万一(集成模式和经典模式),我尝试在 IIS 和 Cassini 中运行 webapp。

public void Init(HttpApplication context)
{
context.PostRequestHandlerExecute += ContextOnPostRequestHandlerExecute;
}

private void ContextOnPostRequestHandlerExecute(object sender, EventArgs eventArgs)
{
var app = sender as HttpApplication;
if (app == null)
{
return;
}

var url = app.Request.Url;
if (url.AbsolutePath.EndsWith(".html"))
{
var length = app.Request.ContentLength; // always equal 0
}
}

Web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5">
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
<httpModules>
<add name="MyModule" type="TestWebApp.MyModule, TestWebApp" />
</httpModules>
<httpRuntime targetFramework="4.5" />
<pages>
<namespaces>
<add namespace="System.Web.Optimization" />
<add namespace="Microsoft.AspNet.Identity" />
</namespaces>
<controls>
<add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" />
</controls>
</pages>
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
<providers>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
</providers>
</sessionState>
</system.web>

<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<remove name="FormsAuthentication" />
<add name="PostprocessHtmlModule" type="TestWebApp.MyModule, TestWebApp" preCondition="integratedMode" />
</modules>
<handlers>
<add name="html" verb="GET, HEAD, POST, DEBUG" path="*.html" type="System.Web.UI.PageHandlerFactory" />
</handlers>
</system.webServer>
</configuration>

最佳答案

确保让网络服务器知道它应该使用 asp.net 管道来处理静态内容。默认情况下,您的应用不会处理静态页面。像这样的东西:

这是已经过测试的配置,我知道它可以工作。

<system.web>
<compilation>
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
</system.web>

<system.webServer>
<handlers>
<add name="html" verb="GET, HEAD, POST, DEBUG" path="*.html" type="System.Web.UI.PageHandlerFactory" />
</handlers>
</system.webServer>

关于c# - 可以在 IIS 中对静态 html 页面进行后处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31009493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com