У меня есть веб-служба, которая должна вернуть большой текстовый файл для вызова AJAX на клиенте. Для начала у меня есть допустимый путь к текстовому файлу:
var fileName = <file on server>
Я знаю, что имя файла действительно, потому что я могу открыть его на сервере как FileStream
.
Я пробовал некоторые из разных подходов, рекомендованных в ServiceStack, и возвращал поток, но я не могу заставить его работать.
Что я должен вернуть? Мое лучшее предположение:
var stream = File.Open(fileName, ...);
return HttpResult(stream, "text/plain"){ AllowPartialResponse = false };
Но это не работает; ответ - это простой объект JSON. Использование FileInfo
с параметром asAttachment
тоже не работает; он просто вернул кучу информации о файлах.
Цель заключается в том, чтобы клиент JavaScript мог получать контент в виде строки:
api.getFile({...}).then( function (result) {
// result has the file contents
});
Каков правильный способ сделать это?
Обновление:
В итоге я использовал этот поток, чтобы заставить его работать:
using( var fs = File.OpenRead( fileName ) )
{
fs.CopyTo( Response.OutputStream );
}
Я не совсем понимаю, почему некоторые из других подходов не работают, но они, по-видимому, связаны с 1) FileInfo и тем, как он ведет себя на сервере, 2) разрешениями файлов в моей среде разработки и 3) "частичным контентом "проблемы и исключения. File.Exists() возвращает false, но не в debug обсуждает одну из проблем, которые меня отбрасывали.
Я только что передал Сервис, который возвращает текстовый файл, и API HttpResult работает как ожидалось:
[Route("/textfile-test")]
public class TextFileTest
{
public bool AsAttachment { get; set; }
}
public class MyServices : Service
{
public object Any(TextFileTest request)
{
return new HttpResult(new FileInfo("~/textfile.txt".MapHostAbsolutePath()),
asAttachment:request.AsAttachment);
}
}
Что вы можете проверить с или без опции asAttachment
:
Вы также можете получить доступ к текстовому файлу напрямую (т.е. без службы):
Кроме того, различные способы возврата ответа изображения также должны применяться и к текстовым файлам.