如何计算 HttpRequestMessage 的大小?

des*_*lsj 6 c# json

假设我有一个像这样构建的 HttpRequestMessage 对象:

var request = new HttpRequestMessage(HttpMethod.Post, uploadUrl)
{
    Content = new ObjectContent(myObject, new JsonMediaTypeFormatter())
};
Run Code Online (Sandbox Code Playgroud)

我会像这样发送:

using (var client = new HttpClient())
{
    var response = await client.SendAsync(request, cancellationToken).ConfigureAwait(false);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在发布之前计算请求有效负载的大小(以字节为单位)?我问的原因是因为我将把这个请求提交给第 3 方 API,我知道如果它超过预定的最大大小,API 将拒绝我的请求。我想如果我可以计算请求中有效负载的大小,我可以避免发布超过此最大大小的请求。

Ale*_*ADE 5

我用 :

requestMessage.Headers.ToString().Length +                  // Header Length
    (requestMessage.Content?.Headers.ContentLength ?? 0);   // Content Length
Run Code Online (Sandbox Code Playgroud)

您还可以读取内容数据并计算其大小:

public async Task<long> GetRequestSizeAsync(HttpRequestMessage requestMessage)
{
    var reader = requestMessage.Headers.ToString();
    var content = await requestMessage.Content.ReadAsStringAsync();
    return reader.Length + content.Length;
}
Run Code Online (Sandbox Code Playgroud)

同步版本:

public long GetRequestSize(HttpRequestMessage requestMessage)
{
    var reader = requestMessage.Headers.ToString();
    var content = requestMessage.Content.ReadAsStringAsync().Result;
    return reader.Length + content.Length;
}
Run Code Online (Sandbox Code Playgroud)