Возвращение файла Json с Нэнси для использования в Jquery - PullRequest
1 голос
/ 28 сентября 2011

У меня есть файл, содержащий 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.

Как изменить тип содержимого на 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?

Ответы [ 2 ]

3 голосов
/ 28 сентября 2011

В настоящее время вы не можете переопределить тип контента, используя метод расширения, вы должны это сделать, и я зарегистрирую проблему и исправлю ее для 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 в конце недели: -)

2 голосов
/ 28 сентября 2011

А вот и исправление https://github.com/NancyFx/Nancy/commit/3d3e45017c0710f4732cf971274f9116611ec478 в мастере:)

...