我尝试使用public API手动将崩溃上传到HockeyApp。当使用Postman调用api链接并上传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项目的可移植库中编写的。
答案 0 :(得分:1)
关注@LukasSpieß消化后,我问了question关于HockeyApp的支持。显然他们不处理边界标题中的引号。我错过了比较邮递员的要求和我的一件事。
以下是解决方案:
var contentTypeString = content.Headers.ContentType.ToString().Replace("\"", "");
content.Headers.Remove("Content-Type");
content.Headers.TryAddWithoutValidation("Content-Type", contentTypeString);