gpt4 book ai didi

asp.net - 使用asp.net HTTPHandler实现自己的代码然后调用它的默认实现?

转载 作者:可可西里 更新时间:2023-11-01 16:38:44 26 4
gpt4 key购买 nike

我遇到了一些问题,我在我的 web.config 文件中创建了一个类型作为 aspx 的 HTTPHandler,代码..

<add path="*.aspx" verb="*" type="myHandler"></add>

cs页面是

public class myHandler :  IHttpHandler
{
public void ProcessRequest(System.Web.HttpContext context)
{
// check if client browser can accept gzip encoding
string AcceptEncoding = context.Request.Headers["Accept-Encoding"];
if (!string.IsNullOrEmpty(AcceptEncoding) && AcceptEncoding.Contains("gzip"))
{
// if yes, apply it
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
context.Response.AddHeader("Content-Encoding", "gzip");
}
// don't do anything else, just let the default page handling work
}

public bool IsReusable
{
get { return false; }
}

}

如您所见,我正在检查客户端是否接受 gzip 编码,如果是,则添加它,并让默认进程处理...但是我得到的回应是..

XML Parsing Error: no element found
Location: http://localhost:49903/Masters/Default.aspx
Line Number 1, Column 1:
^

每个页面都返回此错误?我猜测在我的处理程序中处理请求后,它会以某种方式清除所有其他内容或相关内容。

Firebug 显示以下内容..

Response Headers

Cache-Control private
Connection Close
Content-Encoding gzip
Content-Length 0
Date Sat, 06 Oct 2012 13:14:50 GMT
Server ASP.NET Development Server/10.0.0.0
X-AspNet-Version 4.0.30319


Request Headers

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Connection keep-alive
Cookie ASP.NET_SessionId=1wfoaqta3mosntii1c3ual1i; .ASPXAUTH=D41BBDC2CCF15048BB5A345EBBFBC63EAE35FD37E2F1F170C1D68495477889A989353D4EB30F2B9A723F83C21293A47478B654A1BD2453BCF032DC539427EA0E519D2FEE70DB7660F00AA90E159633C4
Host localhost:49903
Referer http://localhost:49903/Masters/Default.aspx
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1


Request Headers From Upload Stream

Content-Length 8241
Content-Type multipart/form-data; boundary=---------------------------2995119424827

因此,根据我的猜测,我想知道有没有一种方法可以在我按照自己的方式处理页面后,执行类似 base.ProcessRequest() 的操作。我知道这是不可能的,因为我正在实现一个接口(interface)而不是从一个类派生,但我想知道,我如何让 asp.net 引擎在完成我的页面后处理页面?

NB 这个问题不是关于实现 gzib 编码的,我知道我可以在 web 配置中设置它,在每个页面,在 IIS 中,在实用程序类中创建一个静态函数并调用它,并且许多其他的事情。但同样,请不要回答我可以使用不同的方式来实现此 gzip 编码,我知道我可以,我关心的是如何让 asp.net 进行默认处理(或任何可能意味着)在我完成自定义处理之后?

最佳答案

你走错了路。您尝试使用的处理程序是通过添加 .aspx 来制作一种完全不同的方式来处理以不同扩展名结尾的某种文件,然后您处理该页面并且不允许 asp.net 处理所有页面。

你应该做的是制作一个httpModule,例如类:

public class gZipModule : IHttpModule
{
void IHttpModule.Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}

void IHttpModule.Dispose()
{
}

private void context_BeginRequest(object sender, EventArgs e)
{
// gzip here
}
}

和网络配置:

<httpModules>
<add type="gZipModule" name="gZipModule" />
</httpModules>

或者更简单,在 global.asax 上生成 Application_BeginRequest gZip

protected void Application_BeginRequest(Object sender, EventArgs e)
{
// check if the file is .aspx, then make gzip
string cTheFile = HttpContext.Current.Request.Path;
string sExtentionOfThisFile = System.IO.Path.GetExtension(cTheFile);

if (sExtentionOfThisFile.Equals(".aspx", StringComparison.InvariantCultureIgnoreCase))
{
// now make gZip
}
}

关于asp.net - 使用asp.net HTTPHandler实现自己的代码然后调用它的默认实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12760185/

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