Возврат файла Json с Нэнси для использования в Jquery

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


person Dave    schedule 28.09.2011    source источник


Ответы (2)


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

person Steven Robbins    schedule 28.09.2011
comment
Большое спасибо, Стивен, это решило проблемы на данный момент. Я посмотрю 0.8, когда он выйдет. - person Dave; 28.09.2011