Web API コントローラーから css を返す際に問題が発生しています。このコードは、css ファイルの要求を受け取り、データベースから読み取った後にそれを返します。
問題は、Web API コードが応答をシリアル化し、css 自体ではなくそれを返しているように見えることです。
ここでは、ブラウザが css を返すサーバーに送信しているリンク タグを確認できます。また、応答が単なる css 文字列ではなく、私の css のシリアル化のように見えることもわかります。
私の要求と応答ヘッダー:
私のコントローラーは次のようになります。
public HttpResponseMessage Get(string fileName, string siteId, int id)
{
var fileData = ReadSomeCssFromTheDatabase();
var result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(fileData);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/css");
result.Headers.CacheControl = new CacheControlHeaderValue();
result.Headers.CacheControl.MaxAge = TimeSpan.FromHours(0);
result.Headers.CacheControl.MustRevalidate = true;
return result;
}
インストールされている「text/css」フォーマッターが作成されていますが、何らかの理由でヒットしていません。
public class CssFormatter : MediaTypeFormatter
{
public CssFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/css"));
}
public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
{
var taskCompletionSource = new TaskCompletionSource<object>();
try
{
var memoryStream = new MemoryStream();
readStream.CopyTo(memoryStream);
var s = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
taskCompletionSource.SetResult(s);
}
catch (Exception e)
{
taskCompletionSource.SetException(e);
}
return taskCompletionSource.Task;
}
public override bool CanReadType(Type type)
{
return type == typeof(string);
}
public override bool CanWriteType(Type type)
{
return false;
}
}
私は何を間違っていますか?