HttpResponse是什么类?
发布网友
发布时间:2022-04-27 14:53
我来回答
共4个回答
懂视网
时间:2022-04-27 19:15
在网上经常看见有这样的代码
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);
}
}
热心网友
时间:2022-04-27 16:23
HttpResponse类
描述:
封装来自 ASP.NET 操作的 HTTP 响应信息。
公共构造函数:
HttpResponse
初始化 HttpResponse 类的新实例。
公共属性:
Buffer
获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个响应之后将其发送。
BufferOutput
获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个页之后将其发送。
Cache
获取网页的缓存策略(过期时间、保密性、变化子句)。
CacheControl
将 Cache-Control HTTP 头设置为 Public 或 Private。
Charset
获取或设置输出流的 HTTP 字符集。
ContentEncoding
获取或设置输出流的 HTTP 字符集。
ContentType
获取或设置输出流的 HTTP MIME 类型。
Cookies
获取响应 Cookie 集合。
Expires
获取或设置在浏览器上缓存的页过期之前的分钟数。如果用户在页面过期之前返回该页,则显示缓存版本。提供 Expires 是为了与以前版本的 ASP 兼容。
ExpiresAbsolute
获取或设置从缓存中移除缓存信息的绝对日期和时间。提供 ExpiresAbsolute 是为了与以前版本的 ASP 兼容。
Filter
获取或设置一个包装筛选器对象,该对象用于在传输之前修改 HTTP 实体主体。
HeaderEncoding
获取或设置一个 Encoding 对象,该对象表示当前标头输出流的编码。
IsClientConnected
获取一个值,通过该值指示客户端是否仍连接在服务器上。
IsRequestBeingRedirected
获取一个布尔值,该值指示客户端是否正在被传输到新的位置。
Output
启用到输出 HTTP 响应流的文本输出。
OutputStream
启用到输出 Http 内容主体的二进制输出。
RedirectLocation
获取或设置 Http“位置”标头的值。
Status
设置返回到客户端的 Status 栏。
StatusCode
获取或设置返回给客户端的输出的 HTTP 状态代码。
StatusDescription
获取或设置返回给客户端的输出的 HTTP 状态字符串。
SuppressContent
获取或设置一个值,该值指示是否将 HTTP 内容发送到客户端。
公共方法:
AddCacheDependency
将一组缓存依赖项与响应关联,这样,如果响应存储在输出缓存中并且指定的依赖项发生变化,就可以使该响应失效。
AddCacheItemDependencies
已重载。 使缓存响应的有效性依赖于缓存中的其他项。
AddCacheItemDependency
使缓存响应的有效性依赖于缓存中的其他项。
AddFileDependencies
已重载。 使缓存响应的有效性依赖于缓存中的其他项。
AddFileDependency
将单个文件名添加到文件名集合中,当前响应依赖于该集合。
AddHeader
将一个 HTTP 头添加到输出流。提供 AddHeader 是为了与以前版本的 ASP 兼容。
AppendCookie
将一个 HTTP Cookie 添加到内部 Cookie 集合。
AppendHeader
将 HTTP 头添加到输出流。
AppendToLog
将自定义日志信息添加到 Internet 信息服务 (IIS) 日志文件。
ApplyAppPathModifier
如果会话使用 Cookieless 会话状态,则将该会话 ID 添加到虚拟路径中,并返回组合路径。如果不使用 Cookieless 会话状态,则 ApplyAppPathModifier 返回原始的虚拟路径。
BinaryWrite
将一个二进制字符串写入 HTTP 输出流。
Clear
清除缓冲区流中的所有内容输出。
ClearContent
清除缓冲区流中的所有内容输出。
ClearHeaders
清除缓冲区流中的所有头。
Close
关闭到客户端的套接字连接。
End
将当前所有缓冲的输出发送到客户端,停止该页的执行,并引发 EndRequest 事件。
Equals
已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。)
Flush
向客户端发送当前所有缓冲的输出。
GetHashCode
用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 (从 Object 继承。)
GetType
获取当前实例的 Type。 (从 Object 继承。)
Pics
将一个 PICS-Label HTTP 标头追加到输出流。
Redirect
已重载。 将客户端重定向到新的 URL。
ReferenceEquals
确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。)
RemoveOutputCacheItem
静态方法从缓存中移除所有与指定路径关联的缓存项。
SetCookie
更新 Cookie 集合中的一个现有 Cookie。
ToString
返回表示当前 Object 的 String。 (从 Object 继承。)
TransmitFile
将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件。
Write
已重载。 将信息写入 HTTP 响应输出流。
WriteFile
已重载。 将指定的文件直接写入 HTTP 响应输出流。
WriteSubstitution
允许将响应替换块插入响应,从而允许为缓存的输出响应动态生成指定的响应区域。
受保护的方法:
Finalize
允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。 (从 Object 继承。)
MemberwiseClone
创建当前 Object 的浅表副本。 (从 Object 继承。)
热心网友
时间:2022-04-27 17:41
httpResponse是用来在HTTP协议也就是你一般认为的网页输出的
比如重定向redirect(url),输出网页内容write(str)......
例
在default.aspx相关的default.aspx.cs的load中写Response.Write("Hello word!");
运行,你可以在网页上看到Hello word!字符了
上面的Response是一个Web类的属性,类型就是HttpResponse
热心网友
时间:2022-04-27 19:15
就是用来操作HTTP响应信息的类啊