エラーが発生したときにページに何をレンダリングするかを決定するこの関数があります (404/500):
private enum RenderType
{
HTML,
Json,
Text
}
private RenderType GetRenderType(NancyContext context)
{
var enumerable = context.Request.Headers.Accept;
var ranges = enumerable.OrderByDescending(o => o.Item2).Select(o => new MediaRange(o.Item1)).ToList();
foreach (var item in ranges)
{
if (item.Matches("text/html"))
{
return RenderType.HTML;
}
else if (item.Matches("application/json") || item.Matches("text/json"))
{
return RenderType.Json;
}
}
return RenderType.Text;
}
問題は、不明な Accept ヘッダーの場合、if ステートメントを通過する最初の RenderType を返すことです。コードを変更しました。デフォルトは、RenderType.Text ではなく最初の if ステートメントです。
私はこれを理解しようとして一晩中起きていました。何がこれをしているのか誰にもわかりませんか?
ちなみに、何が送信されているかはわかっています。これはクロムデバッガーからのものです。
Sent:
Accept:image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Recieved:
Status Code:404 Not Found
Content-Type:text/html
Transfer-Encoding:chunked
ご覧のとおり、テキストではなく html を返しているため、Content-Type ヘッダーは「text/plain」にする必要があります。