Отправить поток в HttpResponseMessage вместо необработанного файла - PullRequest
0 голосов
/ 12 июня 2018

У меня есть требование отправки файла stream / stream в качестве ответа в webapi от odata.Ниже приведен код API

    public async Task<HttpResponseMessage> GetDocumentFiles()
       {
 var tskk = context.BaseUri;
                sb.Append(context.BaseUri)
                  .Append("FILES(tNumber='")
                  .Append("1")
                  .Append("',Type='")
                  .Append("2")

                  .Append("',Application='")
                  .Append("a")
                  .Append("')/$value");
             var queryUrl = sb.ToString();
             var req = WebRequest.Create(queryUrl);
             var response = req.GetResponse();
             using (var res = (WebResponse)req.GetResponse())
             {
              Stream reader = (Stream)res.GetResponseStream();
              return reader;
             }
       }

, но когда я запускаю приведенный ниже код с помощью почтальона, я получаю исключение.Любые способы отправить поток файла без загрузки файла в любое место.Таким образом, клиенты, которые получают доступ к этому методу, должны иметь возможность загрузить файл с помощью этого ответа.

Получено исключение:

"$id": "1",
    "Message": "An error has occurred.",
    "ExceptionMessage": "The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.",
    "ExceptionType": "System.InvalidOperationException",
    "StackTrace": null,
    "InnerException": {
        "$id": "2",
        "Message": "An error has occurred.",
        "ExceptionMessage": "Error getting value from 'Length' on 'System.Net.ConnectStream'.",
        "ExceptionType": "Newtonsoft.Json.JsonSerializationException",
        "StackTrace": "   at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)\r\n   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter writer, Object value, JsonContainerContract contract, JsonProperty member, JsonProperty property, JsonContract& memberContract, Object& memberValue)\r\n   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)\r\n   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)\r\n   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)\r\n   at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)\r\n   at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding)\r\n   at System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding)\r\n   at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, HttpContent content)\r\n   at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.WebHost.HttpControllerHandler.<WriteBufferedResponseContentAsync>d__1b.MoveNext()",
        "InnerException": {
            "$id": "3",
            "Message": "An error has occurred.",
            "ExceptionMessage": "This stream does not support seek operations.",
            "ExceptionType": "System.NotSupportedException",
            "StackTrace": "   at System.Net.ConnectStream.get_Length()\r\n   at GetLength(Object )\r\n   at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)"
        }
    }

Спасибо, Намита

...