尝试将崩溃上传到 hockeyapp 时出现 404 错误

404 error when trying to upload crash to hockeyapp

我正在尝试使用 public API 将崩溃手动上传到 HockeyApp。使用 Postman 调用 api link 并上传 crash.log 文件时,它工作正常,但是当我尝试从 C# 代码执行相同操作时,出现 404 错误。

这是我的代码:

string log = ""; //log content
using (HttpClient client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("*/*"));

    var content = new MultipartFormDataContent();

    var stringContent = new StringContent(log);
    stringContent.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("text/plain");

    content.Add(stringContent, "log", "crash.log");

    var response = await this.client.PostAsync("https://rink.hockeyapp.net/api/2/apps/[APP_ID]/crashes/upload", content);
}

我正在使用 WireShark 分析 Postman 发送的请求,并试图让我的请求看起来完全一样。我看到的唯一区别是来自 C# 代码的请求在附件的 Content-Disposition 中有 filename* 字段,而来自 Postman 的请求没有:

Content-Disposition: form-data; name="log"; filename="crash.log"; filename*=utf-8''%22crash.log%22

可能值得一提的是,代码是在 Xamarin 项目的可移植库中编写的。

根据@Lukas Spieß 的建议,我询问了 question 关于 HockeyApp 支持的问题。显然他们不处理边界 header 中的引号。我错过了比较 Postman 请求和我的请求的一件事。

解决方法如下:

var contentTypeString = content.Headers.ContentType.ToString().Replace("\"", "");

content.Headers.Remove("Content-Type");
content.Headers.TryAddWithoutValidation("Content-Type", contentTypeString);