gpt4 book ai didi

c# - HttpWebResponse 输出流不关闭

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:52 26 4
gpt4 key购买 nike

我正在编写自定义 ActionFilterAttribute 并尝试将一些数据直接写入 ASP.NET MVC 3 中的输出流。我正在编写的数据就是我需要响应的所有数据,但是在我的数据渲染 View 之后有一个额外的数据。我正在尝试关闭 OutputStream,但它仍然可以写入。如何关闭此流以进行写入或忽略后续 HTML 呈现?

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var request = filterContext.RequestContext.HttpContext.Request;
var acceptTypes = request.AcceptTypes ?? new string[] {};
var response = filterContext.HttpContext.Response;

if (acceptTypes.Contains("application/json"))
{
response.ContentType = "application/json";
Serializer.Serialize(data, response.ContentType, response.OutputStream);
}
else if (acceptTypes.Contains("text/xml"))
{
response.ContentType = "text/xml";
Serializer.Serialize(data, response.ContentType, response.OutputStream);
}
response.OutputStream.Close();
}

UPD
例如我的数据是 {"Total": 42, "Now": 9000}
而我的看法是这样的

<div>
<span>The data that shouldn't be here</span>
</div>

作为回应我得到

{"Total": 42, "Now": 9000}
<div>
<span>The data that shouldn't be here</span>
</div>

如您所见,它不是有效的 JSON。我的目标是只发送 JSON 或 XML

最佳答案

ASP.NET 管道管理响应对象的生命周期。如果您突然关闭流或结束响应,下游组件将在尝试写入时失败。

如果你想强制系统结束响应,你应该调用HttpApplication.CompleteRequest() .它将绕过 ASP.NET 管道中的其余事件,因此它并非没有潜在的不良副作用,但这是推荐的方法。

可以找到更多信息here .

关于c# - HttpWebResponse 输出流不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8817665/

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