c# - App Center push 在 Postman 中有效,但在我的 C# 应用程序中无效
问题描述
我的 C# 应用程序中有一项服务,它使用 App Center 的 api 推送通知。我的所有请求都以 401(未经授权)返回,但当我在邮递员上使用相同的详细信息时,即content、header auth、owner_name和app_name它成功运行并发送应用程序。
这非常令人困惑,我想知道 Postman 是否会处理一些我遗漏的额外点点滴滴。
C# 推送通知服务
private async Task<bool> PostHttpRequest(PushNotificationModel pushNotificationModel)
{
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("X-API-Token", _appCenterApiToken);
var url = "https://api.appcenter.ms/v0.1/apps/myowner/myapp/push/notifications";
var content = JsonConvert.SerializeObject(pushNotificationModel);
var buffer = Encoding.UTF8.GetBytes(content);
var byteContent = new ByteArrayContent(buffer);
byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await _httpClient.PostAsync(url, byteContent);
return response.IsSuccessStatusCode;
}
我调试了这段代码,并使用传递给客户端的相同数据在 Postman 上使用,因此Model
例如为什么数据不存在。
非常感谢您的帮助!
解决方案
我使用 Telerik Fiddler 解决了这个问题。这个有用的工具允许您主动查看进出您的机器的 HTTP 流量。现在这个错误对我来说是一个愚蠢的错误,但它归结为改变这个:
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("X-API-Token", _appCenterApiToken);
至:
_httpClient.DefaultRequestHeaders.Add("X-API-Token", _appCenterApiToken);
由于第一个实际上出现在HTTP
标头中,Authorization : X-API-Token apiToken
而不是X-API-Token : apiToken
导致请求错误,因此返回401 (Unauthorised)
推荐阅读
- python - python和serialreadline之间的字符串比较
- php - PHP 总是返回相同的 IP
- c++ - 具有任何非类型参数的 C++ 模板特化
- java - 如何从 Google Datastore 获取最新实体?
- java - 使用给定的一组数字对给定数字求和的所有可能组合
- python - 如何使用 Python 子进程将字符串写入文件
- matlab - 根据百分比更改直方图的背景颜色
- swift - 具有基类的协议委托概念
- node.js - MongoDb Automatic Backup NodeJS
- django - 从 DateTimeField/DateField Django ORM 比较年份