我正在尝试使用这个用于asp.net web api (https://github.com/filipw/AspNetWebApi-OutputCache)的缓存库
在安装它之后,我得到了这个错误,并将它缩小到我的XmlMediaTypeFormatter
类中的一个类。
Cannot access a closed Stream
我相信这与Task.Factory.StarNew()
或XmlTextWriter
在WriteToStreamAsync
方法中的某个地方关闭蒸汽有关。有没有其他方法来处理这段代码?
public class CustomXmlFormatter : XmlMediaTypeFormatter
{
public CustomXmlFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/xml"));
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/xml"));
Encoding = new UTF8Encoding(false, true);
}
protected UTF8Encoding Encoding { get; set; }
public override bool CanReadType(Type type)
{
if (type == null)
return false;
return true;
}
public override bool CanWriteType(Type type)
{
if (type == null)
return false;
return true;
}
public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
{
return Task.Factory.StartNew(() =>
{
using (var xmlr = new XmlTextReader(readStream))
{
var serializer = new DataContractSerializer(type);
return serializer.ReadObject(xmlr);
}
});
}
public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext)
{
var serializer = new DataContractSerializer(type, "Response", "");
return Task.Factory.StartNew(() =>
{
using (var xmlw = new XmlTextWriter(writeStream, Encoding))
{
xmlw.Formatting = Formatting.Indented;
serializer.WriteObject(xmlw, value);
}
});
}
}
发布于 2014-04-06 14:13:59
以下是Web API的XmlMediaTypeFormatter
在写出xml时使用的XmlWriterSettings
。
var writerSettings = new XmlWriterSettings
{
OmitXmlDeclaration = true,
CloseOutput = false,
CheckCharacters = false
};
上述设置的用法就像following...you在您的案例中也可以做类似的事情一样。
var xmlWriter = XmlWriter.Create(writeStream, writerSettings);
serializer.WriteObject(xmlWriter, value);
上面的代码片段取自Web API的XmlMediaTypeFormatter
,...you可以看看它的源代码,了解更多想法……
https://stackoverflow.com/questions/22890423
复制相似问题