我目前正在尝试处理异常,因为订阅请求无法及时验证,使用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>
答案 0 :(得分:1)
您引用过时的图书馆(超过2年)。正确的SDK是Microsoft Graph .NET Client Library。它包含了一个更新的error code enumeration。
对于处理错误,代码通常足以处理异常。消息内容对于调试很有用,因为它通常包含更精细的信息(完全失败的内容,哪些属性无效等)。我的一般经验法则是使用code
来处理错误,但同时记录code
和message
属性以进行调试。
要理解的导入部分是由于不同的原因,不同的端点可能会出现相同的错误代码。 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}}略有不同。