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;
}
応答ストリームを正しく作成していませんか? 応答ヘッダーでエンコーディングが指定されていないことに気付きました。これは問題ですか?