1

拡張子が .json の JSON を含むファイルがあります。次のようにナンシーを使用してファイルを提供しています。

Get["/schema/{file}"] = parameters =>
{
    return Response.AsFile(Directory.GetCurrentDirectory() + @"\sitefiles\schema\" + parameters.file as String);
}

次のようなファイルに対してjQuery ajaxリクエストを行うと:

$.ajax({
            url: "/schema/auditResponseSchema.json",
            type: 'GET',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            cache: false,
            success: function (responseSchema) {
                console.log("get response data - Success");
                console.log(responseSchema);
            },
            timeout: 5000,
            error: function (xmlObj, textStatus, errorThrown) {
                console.log("get response data - failed. status:" + textStatus + " error:" + errorThrown);
            }
        });

ファイルを取得しましたが、JSON として認識されません。これは、返される Content-Type が application/octet-stream であるためだと確信しています。

Content-Type を application/json に変更するにはどうすればよいですか?

私はもう試した:

// this returns "application/json in the content.
return Response.AsFile(Directory.GetCurrentDirectory() + @"\sitefiles\schema\" + parameters.file as String).Headers["Content-Type"] = "application/json";

// this returns the location of the file
return Response.AsJson(Directory.GetCurrentDirectory() + @"\sitefiles\schema\" + parameters.file as String);

ファイルの内容を文字列に読み取ってから Response.AsJson を使用する必要がありますか、または Response.AsFile が返すヘッダーを変更する方法はありますか?

4

2 に答える 2

3

現在、拡張メソッドを使用してコンテンツ タイプをオーバーライドすることはできません。オーバーライドできるはずです。問題をログに記録し、0.8 で修正しますが、現時点ではできません。

ただし、GenericFileResponse を直接返すこともできます (拡張メソッドが舞台裏で行うのはこれだけです)。

return new GenericFileResponse(Directory.GetCurrentDirectory() + @"\sitefiles\schema\" + parameters.file as String, "application/json");

Directory.GetCurrentDirectory を使用しないことをお勧めしますが、相対パスとして指定できるはずです。

編集: 興味がある場合は、ここに問題を記録してください https://github.com/NancyFx/Nancy/issues/315

編集:そしてそれは修正されました..修正は週末に来る0.8になります:-)

于 2011-09-28T11:20:49.963 に答える
2

そして、これがマスターの修正https://github.com/NancyFx/Nancy/commit/3d3e45017c0710f4732cf971274f9116611ec478です:)

于 2011-09-28T12:29:42.327 に答える