如何在C#GraphSDK中可靠地识别Throttling ServiceException

时间:2018-03-22 13:55:33

标签: c# microsoft-graph

我目前正在测试在C#GraphSdk中可靠地检测限制的方法。

将过多的联系请求(10.000req / 10min)发送到:

/v1.0/users/{Userid}/contacts/{contactId}

我将收到以下ServiceException:

enter image description here

我的第一个想法是只检查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(字符串)被错误地设置为"未知错误"而不是"太多的请求" (可能是一个错误)。

  • 任何建议或想法,我如何可靠地注意到节流 错误?
  • 特别建议如何可靠地比较 HTTPStatusCode等于429?
  • 也许有一些文档描述了另一种检查错误代码的方法?

2 个答案:

答案 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响应标题,您可以在上面的屏幕截图中看到它。