尝试将崩溃上传到 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);
我正在尝试使用 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);