从GitHub私有仓库下载Release资产时PowerShell/.NET报415错误如何解决
私有仓库GitHub Release资产下载415错误解决方案
错误根因
触发415 Unsupported Media Type错误的核心原因是接口用途与请求参数不匹配:
- 当前你请求的URL是GitHub API的资产元数据查询端点,仅用于返回资产结构化信息,仅支持
Accept: application/json请求头,不支持二进制流返回 - 二进制下载需要使用元数据返回结果中的
browser_download_url字段地址,或配置正确的API版本头直接通过元数据端点下载
修复方案
方案1:先查元数据再下载(兼容性最优)
PowerShell实现
# 克隆原有认证头,先查询资产元数据 $metaHeaders = $headers.Clone() $metaHeaders["Accept"] = "application/json" $assetMetadata = Invoke-RestMethod -Uri $downloadUri -Headers $metaHeaders # 使用元数据返回的真实下载地址请求二进制 Invoke-WebRequest -Uri $assetMetadata.browser_download_url -Headers $headers -OutFile $extractPath
C#实现
// 先请求元数据获取真实下载地址 downloadRequest.Headers.Remove("Accept"); downloadRequest.Headers.TryAddWithoutValidation("Accept", "application/json"); using var metaResponse = await client.SendAsync(downloadRequest); metaResponse.EnsureSuccessStatusCode(); var assetMeta = await metaResponse.Content.ReadFromJsonAsync<ReleaseAssetMeta>(); // 构造真实下载请求,复用原有认证配置 using var realDownloadReq = new HttpRequestMessage(HttpMethod.Get, assetMeta.browser_download_url); foreach (var header in downloadRequest.Headers) { realDownloadReq.Headers.TryAddWithoutValidation(header.Key, header.Value); } using var downloadResponse = await client.SendAsync(realDownloadReq); downloadResponse.EnsureSuccessStatusCode(); // 自定义元数据接收类,可按需补充其他字段 public class ReleaseAssetMeta { public string browser_download_url { get; set; } }
方案2:直接通过元数据端点下载
无需跳转地址,在原有请求头中新增X-GitHub-Api-Version: 2022-11-28,保留Accept: application/octet-stream即可直接返回二进制流。
内容的提问来源于stack exchange,提问作者Joe B
相关产品推荐
相关产品推荐

