我正在尝试使用HockeyApp将崩溃手动上传到公共API。当使用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来分析邮递员发送的请求,并试图使我的请求看起来完全一样。我看到的唯一不同是,来自C#代码的请求在附件的内容处理中有文件名*字段,而来自邮递员的请求没有:
Content-Disposition: form-data; name="log"; filename="crash.log"; filename*=utf-8''%22crash.log%22值得一提的是,代码是在Xamarin项目的可移植库中编写的。
发布于 2017-05-12 09:41:08
在@Lukas建议之后,我询问了问题 on HockeyApp支持。显然,它们不处理边界头中的引号。有一件事我错过了比较邮递员的要求和我的。
以下是解决办法:
var contentTypeString = content.Headers.ContentType.ToString().Replace("\"", "");
content.Headers.Remove("Content-Type");
content.Headers.TryAddWithoutValidation("Content-Type", contentTypeString);https://stackoverflow.com/questions/43889148
复制相似问题