我目前正在开发一个使用.NET SDK for Microsoft Graph API发出请求的应用程序。专门用于检索有关用户及其OneDrives的信息。
Microsoft通过返回HTTP 429
状态代码来限制API请求,并且我已使用Retry-After
标头实现了退避。然而,我注意到在看到一些请求之后,我似乎受到了限制。
我一直在使用Microsoft Graph Explorer来测试我的一些API调用,并注意到在通过该方法访问API时我似乎从未得到429
响应。在看到人们在Linux上遇到OneDrive客户端问题的报告后,他们设法通过更改User-Agent
标题来解决问题,我想也许我需要为我的请求设置User-Agent
。
结果是,如果我将User-Agent
标头设置为Mozilla/5.0
,那么所有限制问题似乎都会消失。我已经搜索了高低,到目前为止还没有设法找到有关User-Agent
应该是什么的任何文档,我宁愿避免让我的应用程序冒充浏览器,所以我想知道是否有我可能错过的任何指导或文件?
例如,Mozilla/5.0
的用户代理似乎不会导致限制,但MyApp/1.0
会导致限制。
答案 0 :(得分:2)
Microsoft有一些处理节流的最佳实践:
您应按以下步骤装饰您的http用户代理:
NONISV|CompanyName|AppName/Version
标识为NONISV,并包括公司名称,应用名称(以竖线字符分隔),然后添加以斜杠分隔的版本号
或
ISV|CompanyName|AppName/Version
标识为ISV,并包含公司名称,应用名称(以竖线字符分隔),然后添加用斜杠字符分隔的版本号
答案 1 :(得分:1)
User-Agent
标题上没有任何指导,说实话,我不确定为什么这会对限制产生任何影响。
Microsoft Graph中的限制由您正在与之交互的基础服务处理。例如,/notes/
端点限制由OneNote控制,而/messages
由Exchange控制。
在大多数情况下,OneDrive将按每个用户的每个应用的并发请求数量进行限制。因此,使用委派权限,您的应用通常应该能够同时上传4个文件而不会出现问题。除此之外,您将开始看到429
个回复。