1

我有这个函数来确定发生错误时在页面上呈现的内容(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”

4

0 回答 0