update responses
This commit is contained in:
parent
a855864207
commit
6865bb5353
|
@ -18,7 +18,7 @@ namespace ServiceStack.Host
|
||||||
serializer(response, responseStream);
|
serializer(response, responseStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Action<object, Stream> GetStreamSerializer(string contentType)
|
public static Action<object, Stream> GetStreamSerializer(string contentType)
|
||||||
{
|
{
|
||||||
switch (GetRealContentType(contentType))
|
switch (GetRealContentType(contentType))
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,19 +15,19 @@ namespace ServiceStack
|
||||||
{
|
{
|
||||||
public static class HttpResponseExtensionsInternal
|
public static class HttpResponseExtensionsInternal
|
||||||
{
|
{
|
||||||
public static async Task<bool> WriteToOutputStream(IResponse response, Stream outputStream, object result)
|
public static async Task<bool> WriteToOutputStream(IResponse response, object result)
|
||||||
{
|
{
|
||||||
var asyncStreamWriter = result as IAsyncStreamWriter;
|
var asyncStreamWriter = result as IAsyncStreamWriter;
|
||||||
if (asyncStreamWriter != null)
|
if (asyncStreamWriter != null)
|
||||||
{
|
{
|
||||||
await asyncStreamWriter.WriteToAsync(outputStream, CancellationToken.None).ConfigureAwait(false);
|
await asyncStreamWriter.WriteToAsync(response.OutputStream, CancellationToken.None).ConfigureAwait(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var streamWriter = result as IStreamWriter;
|
var streamWriter = result as IStreamWriter;
|
||||||
if (streamWriter != null)
|
if (streamWriter != null)
|
||||||
{
|
{
|
||||||
streamWriter.WriteTo(outputStream);
|
streamWriter.WriteTo(response.OutputStream);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ namespace ServiceStack
|
||||||
{
|
{
|
||||||
using (stream)
|
using (stream)
|
||||||
{
|
{
|
||||||
await stream.CopyToAsync(outputStream).ConfigureAwait(false);
|
await stream.CopyToAsync(response.OutputStream).ConfigureAwait(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@ namespace ServiceStack
|
||||||
response.ContentType = "application/octet-stream";
|
response.ContentType = "application/octet-stream";
|
||||||
response.SetContentLength(bytes.Length);
|
response.SetContentLength(bytes.Length);
|
||||||
|
|
||||||
await outputStream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
|
await response.OutputStream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,9 +152,7 @@ namespace ServiceStack
|
||||||
response.ContentType += "; charset=utf-8";
|
response.ContentType += "; charset=utf-8";
|
||||||
}
|
}
|
||||||
|
|
||||||
var outputStream = response.OutputStream;
|
var writeToOutputStreamResult = await WriteToOutputStream(response, result).ConfigureAwait(false);
|
||||||
|
|
||||||
var writeToOutputStreamResult = await WriteToOutputStream(response, outputStream, result).ConfigureAwait(false);
|
|
||||||
if (writeToOutputStreamResult)
|
if (writeToOutputStreamResult)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -167,11 +165,28 @@ namespace ServiceStack
|
||||||
response.ContentType = defaultContentType;
|
response.ContentType = defaultContentType;
|
||||||
|
|
||||||
var bytes = Encoding.UTF8.GetBytes(responseText);
|
var bytes = Encoding.UTF8.GetBytes(responseText);
|
||||||
await outputStream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
|
await response.OutputStream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ContentTypes.Instance.SerializeToStream(request, result, outputStream);
|
await WriteObject(request, result, response).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task WriteObject(IRequest request, object result, IResponse response)
|
||||||
|
{
|
||||||
|
var contentType = request.ResponseContentType;
|
||||||
|
var serializer = ContentTypes.GetStreamSerializer(contentType);
|
||||||
|
|
||||||
|
using (var ms = new MemoryStream())
|
||||||
|
{
|
||||||
|
serializer(result, ms);
|
||||||
|
|
||||||
|
ms.Position = 0;
|
||||||
|
response.SetContentLength(ms.Length);
|
||||||
|
await ms.CopyToAsync(response.OutputStream).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//serializer(result, outputStream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ namespace ServiceStack
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ContentTypes.Instance.SerializeToStream(this.RequestContext, this.Response, responseStream);
|
await HttpResponseExtensionsInternal.WriteObject(this.RequestContext, this.Response, response).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user