我目前正在测试在C#GraphSdk中可靠地检测限制的方法。
将过多的联系请求(10.000req / 10min)发送到:
/v1.0/users/{Userid}/contacts/{contactId}
我将收到以下ServiceException:
我的第一个想法是只检查StatusCode,但因为它来自System.Net.HttpStatusCode类型" Throttling" REST API发送的代码429不包含在枚举中。
目前我使用此代码来检测限制消息:
if(e.StatusCode.ToString() == "429")
{
Console.WriteLine("this is an throttling exception");
}
这种方法的缺点是,如果在将来的某个时间添加了429的枚举,则此代码将失败。默默。导致难以察觉的错误。
我无法使用Code
中的字符串属性Error-PropertyObj
,因为不能保证它始终是相同的消息,例如"请求太多"。
特别是在这种情况下,ErrorCode
(字符串)被错误地设置为"未知错误"而不是"太多的请求" (可能是一个错误)。
答案 0 :(得分:1)
使用HttpStatusCode
而不是int
值,您可以避免被string
枚举的任何更改所击中。如您所述,如果为string
添加了枚举,429
会更改,但int
值将保持不变:
switch ((int) e.StatusCode)
{
case 429:
Console.WriteLine("this is an throttling exception");
break;
default:
}
答案 1 :(得分:0)
另一种方法是查看响应标头。当我们429你,我们添加一个Retry-After响应标题,您可以在上面的屏幕截图中看到它。