C# 如何在asp.net中发送压缩数据

C# 如何在asp.net中发送压缩数据,c#,asp.net,java-me,C#,Asp.net,Java Me,我已经用几个aspx创建了一个ASP.net应用程序。其中一些被用作API链接。这些API页面被传递一些头的J2ME应用程序使用。我正在检查这些标题,特别是“接受编码”,以便我的页面可以发送压缩内容 下面的代码显示了其中一个API页面中的示例代码 byte[] buffer; int bufferLength; protected void Page_Load(object sender, EventArgs e) { bufferLength = Re

我已经用几个aspx创建了一个ASP.net应用程序。其中一些被用作API链接。这些API页面被传递一些头的J2ME应用程序使用。我正在检查这些标题,特别是“接受编码”,以便我的页面可以发送压缩内容

下面的代码显示了其中一个API页面中的示例代码

byte[] buffer;
    int bufferLength;

    protected void Page_Load(object sender, EventArgs e)
    {
        bufferLength = Request.ContentLength;
        buffer = new byte[bufferLength];
        buffer = Request.BinaryRead(bufferLength);
        string s = Encoding.ASCII.GetString(buffer);

        bool needEncrypted = (Request.Headers["Accept-Encoding"] != null);

        if (!string.IsNullOrEmpty(s))
        {
            JavaScriptSerializer ser = new JavaScriptSerializer();
            CRequestQuestParameter QuestPara = ser.Deserialize<CRequestQuestParameter>(s);
            CUtil utilFun = new CUtil(WebConfigurationManager.ConnectionStrings["TheConnectionString"].ToString());

            CResponseQuestionSets res = new CResponseQuestionSets();


            //No error setting
            res.ErrorCode = -1;
            res.ErrorMessage = "";
            res.IsError = false;

            //Return data
            res.ResponseData = utilFun.GetQuestionSet(QuestPara);
            if (res.ResponseData != null) {
                res.ErrorCode = -1;
                res.ErrorMessage = "";
                res.IsError = false;

            }
            else
            {
                res.ErrorCode = 102;
                res.ErrorMessage = "User does not exists";
                res.IsError = true;

            }



            if (needEncrypted)
            {
                HttpContext context = HttpContext.Current;
                context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
                HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
            }

            Response.ContentType = "application/json charset=utf-8";
            Response.Write(ser.Serialize(res));
            Response.End();

        }
    }
byte[]缓冲区;
int缓冲长度;
受保护的无效页面加载(对象发送方、事件参数e)
{
bufferLength=Request.ContentLength;
buffer=新字节[bufferLength];
buffer=Request.BinaryRead(bufferLength);
字符串s=Encoding.ASCII.GetString(缓冲区);
bool needEncrypted=(Request.Headers[“接受编码”]!=null);
如果(!string.IsNullOrEmpty)
{
JavaScriptSerializer ser=新的JavaScriptSerializer();
CRequestQuestParameter QuestPara=ser.反序列化;
CUtil utilFun=新的CUtil(WebConfiguration Manager.ConnectionString[“TheConnectionString”].ToString());
CresponSequenceSets res=新的CresponSequenceSets();
//无错误设置
res.ErrorCode=-1;
res.ErrorMessage=“”;
res.IsError=false;
//返回数据
res.ResponseData=utilFun.GetQuestionSet(QuestPara);
如果(res.ResponseData!=null){
res.ErrorCode=-1;
res.ErrorMessage=“”;
res.IsError=false;
}
其他的
{
res.ErrorCode=102;
res.ErrorMessage=“用户不存在”;
res.IsError=真;
}
如果(加密)
{
HttpContext=HttpContext.Current;
context.Response.Filter=new GZipStream(context.Response.Filter,CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader(“内容编码”,“gzip”);
}
Response.ContentType=“application/json charset=utf-8”;
Response.Write(ser.Serialize(res));
Response.End();
}
}
这里的问题是J2ME应用程序没有接收压缩的数据,而是获取了标题“内容编码”


有人能帮我解决这个问题吗?

您不需要在代码中进行GZIP编码


通过在和中正确配置站点,可以完全解决此问题。

如果在调用开始时移动筛选器,我的意思是在init页上。@Aristos:好的,我会检查一下。