问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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响应信息的类啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? close your eyes open your mouth是什么儿歌单词 close.your.eyes这句话的中文意思,谢谢 Close your eyes. Clear your heart. Let it go 中文怎么翻译 ? Close your eyeS.是什么意思? G弦上の魔王中音乐close your eyes的罗马发音有吗,谢谢了 close your eyes中文什么意思 gentlycloseyoureyes的中文字怎么读啊? 请问‘Close your eyes’这句话英语和美语发音有何区别 闭上眼睛用英语怎么说 closeyoureyes怎么读? close.your.eyes英语怎么读 close your eyes怎么读 closeyoureyes怎么读 比特币多头爆仓什么意思 转移因子口服液能增强免疫力吗? 葡萄糖酸钙锌口服液可以给孩子增强免疫力吗?孩子抵抗力差 比特币杠杆爆仓是啥意思 五维赖氨酸口服液能提高免疫力吗 匹多莫德口服液(芙露饮)真的能增强免疫力吗? 增强免疫力的口服液有哪些 耳朵里面总是痒外面疼还流水是什么原因 耳朵流水痒臭,有点胀疼 中免悦和美妆海外专营店发货是正品吗 悦上美妆是正品吗 悦美丽商城都有哪些牌子的化妆品买啊? 悦一下??? 悦梦姿美妆产品好不好用? 拼多多妍色美妆海外专营店是真的吗 我苹果手机分身,今天突然不好用了,请问怎么回事? 我苹果手机分身,今天突然不好用了,请问怎么回事? Java中InputStream和OutputStream的区别 三星平板刷机出现downloadinh怎么办 从百度云下载一个东西到电脑,东西大小1G但是只下了500M,这时下载目录有一个downloadin downloadinminecraft是什么意思 手机充不上电了,关机后再开机,显示factorymode等等,还有downloadin怎么回事 三星4s出现Downloadin Do not turm off target 是怎么样了? 请问一个java的文件下载的问题,为什么我的下载每次都看不到进度条,而是一下子就下好了呢? 急急“cl_download_ingame 1”是什么CS参数? vivo手机下载安装了in软件,为什么老是显示无响应? 用迅雷下东西时总会弹出Broadband Download Thunder in a Flash怎么办