Use HttpResponseHeaders instead of a dictionary

This commit is contained in:
Bond_009 2019-06-14 17:14:42 +02:00
parent d405a400aa
commit 3603c64fa6
2 changed files with 26 additions and 52 deletions

View file

@ -4,8 +4,6 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
@ -389,52 +387,16 @@ namespace Emby.Server.Implementations.HttpClientManager
await stream.CopyToAsync(memoryStream, 81920, options.CancellationToken).ConfigureAwait(false); await stream.CopyToAsync(memoryStream, 81920, options.CancellationToken).ConfigureAwait(false);
memoryStream.Position = 0; memoryStream.Position = 0;
return GetResponseInfo(response, memoryStream, memoryStream.Length); var responseInfo = new HttpResponseInfo(response.Headers)
} {
} Content = memoryStream,
StatusCode = response.StatusCode,
ContentType = response.Content.Headers.ContentType?.MediaType,
ContentLength = memoryStream.Length,
ResponseUrl = response.Content.Headers.ContentLocation?.ToString()
};
private HttpResponseInfo GetResponseInfo(HttpResponseMessage httpResponse, Stream content, long? contentLength) return responseInfo;
{
var responseInfo = new HttpResponseInfo()
{
Content = content,
StatusCode = httpResponse.StatusCode,
ContentType = httpResponse.Content.Headers.ContentType?.MediaType,
ContentLength = contentLength,
ResponseUrl = httpResponse.Content.Headers.ContentLocation?.ToString()
};
if (httpResponse.Headers != null)
{
SetHeaders(httpResponse.Content.Headers, responseInfo);
}
return responseInfo;
}
private HttpResponseInfo GetResponseInfo(HttpResponseMessage httpResponse, string tempFile, long? contentLength)
{
var responseInfo = new HttpResponseInfo
{
TempFilePath = tempFile,
StatusCode = httpResponse.StatusCode,
ContentType = httpResponse.Content.Headers.ContentType?.MediaType,
ContentLength = contentLength
};
if (httpResponse.Headers != null)
{
SetHeaders(httpResponse.Content.Headers, responseInfo);
}
return responseInfo;
}
private static void SetHeaders(HttpContentHeaders headers, HttpResponseInfo responseInfo)
{
foreach (var header in headers)
{
responseInfo.Headers[header.Key] = string.Join(", ", header.Value);
} }
} }
@ -496,8 +458,15 @@ namespace Emby.Server.Implementations.HttpClientManager
options.Progress.Report(100); options.Progress.Report(100);
var contentLength = response.Content.Headers.ContentLength; var responseInfo = new HttpResponseInfo(response.Headers)
return GetResponseInfo(response, tempFile, contentLength); {
TempFilePath = tempFile,
StatusCode = response.StatusCode,
ContentType = response.Content.Headers.ContentType?.MediaType,
ContentLength = response.Content.Headers.ContentLength
};
return responseInfo;
} }
} }
catch (Exception ex) catch (Exception ex)

View file

@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Net.Http.Headers;
namespace MediaBrowser.Common.Net namespace MediaBrowser.Common.Net
{ {
@ -50,11 +50,16 @@ namespace MediaBrowser.Common.Net
/// Gets or sets the headers. /// Gets or sets the headers.
/// </summary> /// </summary>
/// <value>The headers.</value> /// <value>The headers.</value>
public Dictionary<string, string> Headers { get; set; } public HttpResponseHeaders Headers { get; set; }
public HttpResponseInfo() public HttpResponseInfo()
{ {
Headers = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
}
public HttpResponseInfo(HttpResponseHeaders headers)
{
Headers = headers;
} }
public void Dispose() public void Dispose()