c# - 将类实现从 asp.net mvc 移植到 asp.net mvc 核心
问题描述
我试图实现一个 ActionResult 的子类,它将从 REST API 流式传输大 JSON 对象,我在堆栈溢出时找到了这个解决方案,但它似乎是 asp.net MVC 的实现。
public class JsonStreamingResult : ActionResult
{
private IEnumerable itemsToSerialize;
public JsonStreamingResult(IEnumerable itemsToSerialize)
{
this.itemsToSerialize = itemsToSerialize;
}
public override void ExecuteResult(ActionContext context)
{
var response = context.HttpContext.Response;
response.ContentType = "application/json";
response.ContentEncoding = Encoding.UTF8;
JsonSerializer serializer = new JsonSerializer();
using (StreamWriter sw = new StreamWriter(response.OutputStream))
using (JsonTextWriter writer = new JsonTextWriter(sw))
{
writer.WriteStartArray();
foreach (object item in itemsToSerialize)
{
JObject obj = JObject.FromObject(item, serializer);
obj.WriteTo(writer);
writer.Flush();
}
writer.WriteEndArray();
}
}
}
但是当我将它移植到 asp.net core MVC 时,我发现响应类没有 ContentEncoding和OutputStream属性。
请问,任何人都可以提供将此类移植到asp.net核心所需的更改吗?
提前致谢。
解决方案
OutputStream -ASP.NET Core
HttpResponse
包含Body
可以写入响应的属性。ContentEncoding - 设置编码,StreamWriter
因为您手动将结果写入响应流。InASP.NET MVC
HttpResponse.ContentEncoding
仅在您调用HttpResponse.Write
方法时使用。
public class JsonStreamingResult : ActionResult
{
private IEnumerable itemsToSerialize;
public JsonStreamingResult(IEnumerable itemsToSerialize)
{
this.itemsToSerialize = itemsToSerialize;
}
public override void ExecuteResult(ActionContext context)
{
var response = context.HttpContext.Response;
response.ContentType = "application/json";
JsonSerializer serializer = new JsonSerializer();
using (StreamWriter sw = new StreamWriter(response.Body, Encoding.UTF8))
using (JsonTextWriter writer = new JsonTextWriter(sw))
{
writer.WriteStartArray();
foreach (object item in itemsToSerialize)
{
JObject obj = JObject.FromObject(item, serializer);
obj.WriteTo(writer);
writer.Flush();
}
writer.WriteEndArray();
}
}
}
更新
根据源代码,JsonResultExecutor
内部完全按照我的描述进行,唯一的区别是它从ContentType
.
推荐阅读
- visual-studio-2019 - Visual Studio 2019 16.6.1 缓慢且无响应
- soap - WSO2 Enterprise Integrator:在数据服务上启用安全性:无法对安全令牌进行身份验证或授权
- validation - 是否可以在 Yii2 中将自定义验证器与唯一验证器一起使用或在其内部使用?
- c# - 在同一个类中使用来自另一个方法的变量-c#
- firebase - 为什么我的 React Native FlatList keyExtractor 返回未定义?
- django - 如何使用序列化仅序列化某些字段?
- c - 解决在两个不同操作系统中定义的结构的重新定义
- reactjs - Material UI,自定义垂直步进器 React
- c++ - 如何让 qDebug 编写方法和类名?
- windows - 如何正确检查错误级别