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;
    }

問題は、不明な 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」にする必要があります。

4

0 に答える 0