我正在使用 Asp.Net 的 Web Api 编写文件服务。该服务从 SQL Server 检索文件(Css、Excel、Csv 等)并提供它们以响应 Get 请求。
我的第一个测试用例是针对 Css 文件的。问题是,虽然我可以在服务器端看到正确的数据,但当浏览器检索/解码它时,结果会被破坏。该问题似乎与编码有关。
以下是 FireFox 中的请求/响应标头:
当我单击 FireBug 中的响应选项卡时,它的外观如下:
结果看起来像 ascii 被显示为 utf8。这是 FireBug 中的 html 视图:
上面的示例是运行 ssl 的 Facebook 应用程序中的 iFrame。
如果我获取 url 并直接在浏览器中打开它,它可以正常工作并正确显示我的 Css:
总之,当我从 Facebook 应用程序中的标签检索我的 Css 文件时,我得到了垃圾(编码问题?)。如果我直接从浏览器中检索它,它就可以工作。
我的 CssFormatter MediaTypeFormatter 代码:
public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext)
{
var taskSource = new TaskCompletionSource<object>();
try
{
var incomingFile = value as FileRestService.Entity.IFile;
var ms = new MemoryStream(incomingFile.DataBuffer);
ms.CopyTo(writeStream);
ms.Flush();
taskSource.SetResult(writeStream);
}
catch (Exception e)
{
taskSource.SetException(e);
}
return taskSource.Task;
}
我是否错误地创建了响应流?我注意到响应标头没有指定编码。这是一个问题吗?