当用户单击“打印”按钮时,我想下载pdf。
我的控制器方法:
[System.Web.Http.HttpGet]
public FileStreamResult CreatePDF()
{
MemoryStream workStream = new MemoryStream();
Document document = new Document();
PdfWriter.GetInstance(document, workStream).CloseStream = false;
document.Open();
document.Add(new Paragraph("Hello World"));
document.Add(new Paragraph(DateTime.Now.ToString()));
document.Close();
byte[] byteInfo = workStream.ToArray();
workStream.Write(byteInfo, 0, byteInfo.Length);
workStream.Position = 0;
return new FileStreamResult(workStream, "application/pdf");
}
这是我从视图中调用它的方式:
$('#print').click(function (evt) {
window.location.href = "/api/pdfdownload/createpdf";
});
单击打印按钮时出现以下错误:
'ObjectContent`1'类型无法序列化 内容类型为'application / json的响应主体; charset = utf-8'。 System.InvalidOperationException 有一个错误 发生。获取价值时出错 'System.IO.MemoryStream'上的'ReadTimeout'。 Newtonsoft.Json.JsonSerializationException 在 Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(对象 目标) Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter 作者,对象值,JsonContainer合同,JsonProperty 成员,JsonProperty属性,JsonContract&memberContract,Object& memberValue) Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter 作者,对象值,JsonObjectContract合同,JsonProperty JsonContainerContract collection成员,JsonProperty containerProperty) Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,对象值,JsonContract valueContract,JsonProperty成员, JsonContainerContract containerContract,JsonProperty containerProperty) Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter 作者,对象值,JsonObjectContract合同,JsonProperty JsonContainerContract collection成员,JsonProperty containerProperty) Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,对象值,JsonContract valueContract,JsonProperty成员, JsonContainerContract containerContract,JsonProperty containerProperty) Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter,对象值,类型objectType)位于 Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter,对象值,类型objectType)位于 System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type 类型,对象值,流writeStream,编码有效编码) System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type 类型,对象值,流writeStream,编码有效编码) System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type 类型,对象值,流writeStream,HttpContent内容) System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(Type 类型,对象值,流writeStream,HttpContent内容, TransportContext transportContext,CancellationToken cancelToken)---从先前位置开始的堆栈结束跟踪 引发了异常--- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) System.Web.Http.WebHost.HttpControllerHandler.d__1b.MoveNext() 有一个错误 发生。不支持超时 此流。 System.InvalidOperationException 在System.IO.Stream.get_ReadTimeout()在 GetReadTimeout(Object)位于 Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(对象 目标)
在这种情况下,我只是不理解此异常的含义。将感谢您的帮助。
答案 0 :(得分:0)
这意味着它无法将MemoryStream
类型的对象序列化为JSON:
“ ObjectContent`1”类型无法序列化响应正文 内容类型“ application / json; charset = utf-8'。 System.InvalidOperationException发生错误。获取错误 “ System.IO.MemoryStream”上“ ReadTimeout”的值。 Newtonsoft.Json.JsonSerializationException ...
我的猜测是,您正在尝试(可能有意而非有意)将MemoryStream序列化为JSON,这在您处理PDF文件时并非偶然,但您不能这样做。 MemoryStream包含字节,并且不能序列化为JSON。
我建议您从asp.net论坛上浏览此post,但没有更多信息,仅此而已。