|
@@ -142,8 +142,6 @@ namespace Emby.Server.Implementations.HttpServer
|
|
throw new ArgumentNullException("result");
|
|
throw new ArgumentNullException("result");
|
|
}
|
|
}
|
|
|
|
|
|
- var optimizedResult = ToOptimizedResult(requestContext, result);
|
|
|
|
-
|
|
|
|
if (responseHeaders == null)
|
|
if (responseHeaders == null)
|
|
{
|
|
{
|
|
responseHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
|
responseHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
|
@@ -154,15 +152,7 @@ namespace Emby.Server.Implementations.HttpServer
|
|
responseHeaders["Expires"] = "-1";
|
|
responseHeaders["Expires"] = "-1";
|
|
}
|
|
}
|
|
|
|
|
|
- // Apply headers
|
|
|
|
- var hasHeaders = optimizedResult as IHasHeaders;
|
|
|
|
-
|
|
|
|
- if (hasHeaders != null)
|
|
|
|
- {
|
|
|
|
- AddResponseHeaders(hasHeaders, responseHeaders);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return optimizedResult;
|
|
|
|
|
|
+ return ToOptimizedResultInternal(requestContext, result, responseHeaders);
|
|
}
|
|
}
|
|
|
|
|
|
public static string GetCompressionType(IRequest request)
|
|
public static string GetCompressionType(IRequest request)
|
|
@@ -189,6 +179,11 @@ namespace Emby.Server.Implementations.HttpServer
|
|
/// <param name="dto"></param>
|
|
/// <param name="dto"></param>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
public object ToOptimizedResult<T>(IRequest request, T dto)
|
|
public object ToOptimizedResult<T>(IRequest request, T dto)
|
|
|
|
+ {
|
|
|
|
+ return ToOptimizedResultInternal(request, dto, null);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private object ToOptimizedResultInternal<T>(IRequest request, T dto, IDictionary<string, string> responseHeaders = null)
|
|
{
|
|
{
|
|
var contentType = request.ResponseContentType;
|
|
var contentType = request.ResponseContentType;
|
|
|
|
|
|
@@ -197,27 +192,27 @@ namespace Emby.Server.Implementations.HttpServer
|
|
case "application/xml":
|
|
case "application/xml":
|
|
case "text/xml":
|
|
case "text/xml":
|
|
case "text/xml; charset=utf-8": //"text/xml; charset=utf-8" also matches xml
|
|
case "text/xml; charset=utf-8": //"text/xml; charset=utf-8" also matches xml
|
|
- return SerializeToXmlString(dto);
|
|
|
|
|
|
+ return GetHttpResult(SerializeToXmlString(dto), contentType, false, responseHeaders);
|
|
|
|
|
|
case "application/json":
|
|
case "application/json":
|
|
case "text/json":
|
|
case "text/json":
|
|
- return _jsonSerializer.SerializeToString(dto);
|
|
|
|
|
|
+ return GetHttpResult(_jsonSerializer.SerializeToString(dto), contentType, false, responseHeaders);
|
|
default:
|
|
default:
|
|
- {
|
|
|
|
- var ms = new MemoryStream();
|
|
|
|
- var writerFn = RequestHelper.GetResponseWriter(HttpListenerHost.Instance, contentType);
|
|
|
|
|
|
+ {
|
|
|
|
+ var ms = new MemoryStream();
|
|
|
|
+ var writerFn = RequestHelper.GetResponseWriter(HttpListenerHost.Instance, contentType);
|
|
|
|
|
|
- writerFn(dto, ms);
|
|
|
|
-
|
|
|
|
- ms.Position = 0;
|
|
|
|
|
|
+ writerFn(dto, ms);
|
|
|
|
|
|
- if (string.Equals(request.Verb, "head", StringComparison.OrdinalIgnoreCase))
|
|
|
|
- {
|
|
|
|
- return GetHttpResult(new byte[] { }, contentType, true);
|
|
|
|
- }
|
|
|
|
|
|
+ ms.Position = 0;
|
|
|
|
|
|
- return GetHttpResult(ms, contentType, true);
|
|
|
|
|
|
+ if (string.Equals(request.Verb, "head", StringComparison.OrdinalIgnoreCase))
|
|
|
|
+ {
|
|
|
|
+ return GetHttpResult(new byte[] { }, contentType, true, responseHeaders);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ return GetHttpResult(ms, contentType, true, responseHeaders);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|