国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

HttpResponse的Output與OutputStream、Filter關系與區別介紹

來源:懂視網 責編:小采 時間:2020-11-27 22:42:08
文檔

HttpResponse的Output與OutputStream、Filter關系與區別介紹

HttpResponse的Output與OutputStream、Filter關系與區別介紹:在網上經常看見有這樣的代碼 HttpResponse response = HttpContext.Current.Response; response.Filter = new PageFilter(response.Filter); 來攔截輸出流,自己也做個類似的東東,如asp.net中 js 合并 壓縮,現在我也來說說這幾個東東是什么吧,
推薦度:
導讀HttpResponse的Output與OutputStream、Filter關系與區別介紹:在網上經常看見有這樣的代碼 HttpResponse response = HttpContext.Current.Response; response.Filter = new PageFilter(response.Filter); 來攔截輸出流,自己也做個類似的東東,如asp.net中 js 合并 壓縮,現在我也來說說這幾個東東是什么吧,

在網上經常看見有這樣的代碼

HttpResponse response = HttpContext.Current.Response;
response.Filter = new PageFilter(response.Filter);

來攔截輸出流,自己也做個類似的東東,如asp.net中 js 合并 壓縮,現在我也來說說這幾個東東是什么吧,需要大家對asp.net的生命周期比較熟悉,如不熟悉的朋友建議先看看ASP.NET 請求處理流程 ASP.NET管線與應用程序生命周期

首先我們來看看這3個屬性的源代碼吧:

代碼如下:
public TextWriter Output
{
get
{
return this._writer;
}
set
{
this._writer = value;
}
}


public Stream OutputStream
{
get
{
if (!this.UsingHttpWriter)
{
throw new HttpException(SR.GetString("OutputStream_NotAvail"));
}
return this._httpWriter.OutputStream;
}
}


代碼如下:
public Stream Filter
{
get
{
if (this.UsingHttpWriter)
{
return this._httpWriter.GetCurrentFilter();
}
return null;
}
set
{
if (!this.UsingHttpWriter)
{
throw new HttpException(SR.GetString("Filtering_not_allowed"));
}
this._httpWriter.InstallFilter(value);
IIS7WorkerRequest request = this._wr as IIS7WorkerRequest;
if (request != null)
{
request.ResponseFilterInstalled();
}
}
}

我們看到Filter和OutputStream都用到了一個屬性UsingHttpWriter,那這個屬性是怎么定義的了
代碼如下:
private bool UsingHttpWriter
{
get
{
return ((this._httpWriter != null) && (this._writer == this._httpWriter));
}
}

從這個屬性我們可以知道_writer 、_httpWriter實際上是同一個東東,它們的類型是HttpWriter ,而HttpWriter 又繼承與TextWriter。現在我們可以解釋Output就是_httpWriter,而OutputStream是_httpWriter的OutputStream屬性。類HttpWriter 主要代碼如下
代碼如下:
public Stream OutputStream
{
get
{
return this._stream;
}
}


internal HttpWriter(HttpResponse response) : base(null)
{
this._response = response;
this._stream = new HttpResponseStream(this);
this._buffers = new ArrayList();
this._lastBuffer = null;
this._charBuffer = (char[]) s_Allocator.GetBuffer();
this._charBufferLength = this._charBuffer.Length;
this._charBufferFree = this._charBufferLength;
this.UpdateResponseBuffering();
}


internal HttpResponseStream(HttpWriter writer)
{
this._writer = writer;
}

HttpResponse 在Filter屬性設置調用了HttpWriter類的InstallFilter方法,而獲取調用了該類的GetCurrentFilter
代碼如下:
internal void InstallFilter(Stream filter)
{
if (this._filterSink == null)
{
throw new HttpException(SR.GetString("Invalid_response_filter"));
}
this._installedFilter = filter;
}

internal Stream GetCurrentFilter()
{
if (this._installedFilter != null)
{
return this._installedFilter;
}
if (this._filterSink == null)
{
this._filterSink = new HttpResponseStreamFilterSink(this);
}
return this._filterSink;
}

由以上代碼我們可以得知HttpResponse的輸出流就是Filter屬性設置的流,即HttpResponse的Output和OutputStream屬性的輸出流都是來自Filter中的流。我們來看看_writer 、_httpWriter它們是在什么時候初始化的了?在HttpResonse中有一個方法
代碼如下:
internal void InitResponseWriter()
{
if (this._httpWriter == null)
{
this._httpWriter = new HttpWriter(this);
this._writer = this._httpWriter;
}
}

該方法是由HttpRuntime的ProcessRequestInternal來調用
代碼如下:
private void ProcessRequestInternal(HttpWorkerRequest wr)
{
HttpContext context;
try
{
context = new HttpContext(wr, false);
}
catch
{
wr.SendStatus(400, "Bad Request");
wr.SendKnownResponseHeader(12, "text/html; charset=utf-8");
byte[] bytes = Encoding.ASCII.GetBytes("<html><body>Bad Request</body></html>");
wr.SendResponseFromMemory(bytes, bytes.Length);
wr.FlushResponse(true);
wr.EndOfRequest();
return;
}
wr.SetEndOfSendNotification(this._asyncEndOfSendCallback, context);
Interlocked.Increment(ref this._activeRequestCount);
HostingEnvironment.IncrementBusyCount();
try
{
try
{
this.EnsureFirstRequestInit(context);
}
catch
{
if (!context.Request.IsDebuggingRequest)
{
throw;
}
}
context.Response.InitResponseWriter();
IHttpHandler applicationInstance = HttpApplicationFactory.GetApplicationInstance(context);
if (applicationInstance == null)
{
throw new HttpException(SR.GetString("Unable_create_app_object"));
}
if (EtwTrace.IsTraceEnabled(5, 1))
{
EtwTrace.Trace(EtwTraceType.ETW_TYPE_START_HANDLER, context.WorkerRequest, applicationInstance.GetType().FullName, "Start");
}
if (applicationInstance is IHttpAsyncHandler)
{
IHttpAsyncHandler handler2 = (IHttpAsyncHandler) applicationInstance;
context.AsyncAppHandler = handler2;
handler2.BeginProcessRequest(context, this._handlerCompletionCallback, context);
}
else
{
applicationInstance.ProcessRequest(context);
this.FinishRequest(context.WorkerRequest, context, null);
}
}
catch (Exception exception)
{
context.Response.InitResponseWriter();
this.FinishRequest(wr, context, exception);
}
}

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

HttpResponse的Output與OutputStream、Filter關系與區別介紹

HttpResponse的Output與OutputStream、Filter關系與區別介紹:在網上經常看見有這樣的代碼 HttpResponse response = HttpContext.Current.Response; response.Filter = new PageFilter(response.Filter); 來攔截輸出流,自己也做個類似的東東,如asp.net中 js 合并 壓縮,現在我也來說說這幾個東東是什么吧,
推薦度:
標簽: http htt filter
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 日韩va亚洲va欧美va浪潮 | 国产精品99久久久 | 青青国产成人久久激情91麻豆 | 日日操狠狠干 | 亚洲色图国产精品 | 五十路亲子中出在线观看 | 国产在线精品观看一区 | 国内精品伊人久久久久妇 | 日本一二三区高清 | 国产在线视频一区二区三区 | 欧美日a| 亚洲精品高清国产一久久 | 精品一区二区三区在线成人 | 精品国产一区二区三区免费看 | 国产精品美女久久久久网站 | 91视频色| 欧美亚洲网 | 亚洲国产一区二区三区在线观看 | 国产aaaaa一级毛片无下载 | 久久久久久久亚洲精品 | 国产综合亚洲欧美日韩一区二区 | 欧美日韩免费在线 | 一道精品一区二区三区 | 亚洲码欧美码一区二区三区 | 最新国产精品精品视频 | 欧美特黄一区二区三区 | 欧美在线播放视频 | 国内精品久久久久久久97牛牛 | 中文字幕有码在线观看 | 精品国产免费人成在线观看 | 亚洲 国产 日韩 欧美 | 久久久久9999 | 国产日韩欧美第一页 | 欧美v亚洲v国产v | 国产精品系列在线观看 | 日韩国产综合 | 亚洲综合视频一区 | 久久伊人一区二区三区四区 | 一区不卡 | 亚洲 欧美 日韩 在线 | 日韩欧美偷拍 |