我有这个函数来确定发生错误时在页面上呈现的内容(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;
}
问题是它返回第一个 RenderType 以通过 if 语句,如果它是一个未知的接受头。我更改了代码,它默认为第一个 if 语句而不是 RenderType.Text。
我整晚都在想办法解决这个问题。任何人都知道可以这样做吗?
在我的旁注中,我知道正在发送的内容,这是来自 chrome 调试器:
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”