Files
MRCC/launcher/PCL-CE/PCL.Core/Utils/Exts/HttpRequestExtension.cs
T
xyou f70b061d1a
CI / Go Backend (push) Canceled after 0s
feat: 项目初始化 + 3D方块世界原型 + AI助搭系统
初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器

HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块

Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚

AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
2026-08-08 14:07:56 +08:00

55 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
namespace PCL.Core.Utils.Exts;
public static class HttpRequestExtension
{
public static async Task<HttpRequestMessage> CloneAsync(this HttpRequestMessage request)
{
ArgumentNullException.ThrowIfNull(request);
var clone = new HttpRequestMessage(request.Method, request.RequestUri)
{
Version = request.Version,
VersionPolicy = request.VersionPolicy
};
if (request.Content is not null)
{
clone.Content = await request.Content._DeepCloneAsync().ConfigureAwait(false);
}
foreach (var header in request.Headers)
{
clone.Headers.TryAddWithoutValidation(header.Key, header.Value);
}
foreach (var option in request.Options)
{
clone.Options.TryAdd(option.Key, option.Value);
}
return clone;
}
private static async Task<HttpContent?> _DeepCloneAsync(this HttpContent content)
{
var ms = new MemoryStream();
await content.CopyToAsync(ms).ConfigureAwait(false);
ms.Position = 0;
var clone = new StreamContent(ms);
// 复制内容头(如 Content-Type, Content-Length 等)
foreach (var header in content.Headers)
{
clone.Headers.TryAddWithoutValidation(header.Key, header.Value);
}
return clone;
}
}