订阅验证错误处理

时间:2018-05-22 09:23:58

标签: c# microsoft-graph

我目前正在尝试处理异常,因为订阅请求无法及时验证,使用Graph SDK。不幸的是,我不确定如何实现这一目标。订阅未及时验证时抛出的异常是:

  

Microsoft.Graph.ServiceException:代码:InvalidRequest       消息:订阅验证请求失败。必须以200 OK回复       这个要求。

ServiceException中的HttpStatusCode是" BadRequest"但这并不足以将错误与其他常见错误区分开来,因为我想以不同的方式处理错误。 ServiceException还包含一个Error属性,其字符串属性名为" Code",其中包含" InvalidRequest"在我的情况下。 Graph SDK中的GraphErrorCode枚举包含此代码,因此我将其用于" IsMatch" ServiceException中的方法:

catch (ServiceException serviceException)
{
     var invRequest = GraphErrorCode.InvalidRequest.ToString();
     if(serviceException.StatusCode == HttpStatusCode.BadRequest)
     {
          if (serviceException.IsMatch(invRequest))
          {
              // do something
          }
      }
}

" InvalidRequest"在graph documentation中定义为:

  

请求格式错误或不正确。

考虑到这一点,我仍然认为我的ErrorHandling不足以捕获这个特定错误。

我想知道的是:

  • 正在使用" GraphErrorCode" enum甚至是正确的。

  • 有没有办法处理这个特定的错误,而不仅仅是比较异常消息(&#34;订阅验证请求失败。必须以200 OK回复此请求&#34;),并使用硬编码字符串。< / p>

1 个答案:

答案 0 :(得分:1)

您引用过时的图书馆(超过2年)。正确的SDK是Microsoft Graph .NET Client Library。它包含了一个更新的error code enumeration

对于处理错误,代码通常足以处理异常。消息内容对于调试很有用,因为它通常包含更精细的信息(完全失败的内容,哪些属性无效等)。我的一般经验法则是使用code来处理错误,但同时记录codemessage属性以进行调试。

要理解的导入部分是由于不同的原因,不同的端点可能会出现相同的错误代码。 BadRequest针对GET资源发布user时的POST可能与发布/events/v1.0/me/a时的内容有所不同。您的处理程序应考虑操作错误

以下是发送无效请求({ "error": { "code": "BadRequest", "message": "Unsupported segment type. ODataQuery: users/48d31887-5fad-4d73-a9f5-3c356e68a038/a", "innerError": { "request-id": "fd4c8b27-26af-4b07-a5be-5efb139d1eb7", "date": "2018-05-22T14:39:02" } } } )时返回的示例错误:

BadRequest

如果我处理的只是BadRequest,我的处理程序就足够了。我可以处理错误并让用户继续前进。然而,在我的日志中,我存储了Unsupported segment type. ODataQuery: users/48d31887-5fad-4d73-a9f5-3c356e68a038/a/a,以便我可以正确地在代码中提交错误。

另一种选择可能是进行一些额外的解析。可以说/a 总是返回错误。也许/a适用于AAD帐户但不适用于MSA用户(FTR,message完全是虚构的)。如果是这种情况,我可能还想解析BadRequest并查看BadRequest是否包含&#34;不支持的细分类型&#34;并且处理它与不包含该消息的{{1}}略有不同。