如果记录不存在,天蓝色方法会爆炸

azure method blows up if the records does not exist

我正在使用 Azure 移动服务教程中的这个方法: await todoTable.LookupAsync(id)。我在 id 1,2 的 table 中有 2 行。 如果我这样做 await todoTable.LookupAsync(1),它会起作用并且 return 记录。如果我做 await todoTable.LookupAsync(8) 看看它将如何处理 null,它只是因 Not Found 异常而爆炸。

感谢您对此的帮助。

NULL 意味着 一条 id = 8 的记录,但它的值为“NULL”。但在您的情况下,您 没有 记录。哪个不一样。

如果您没有记录,您观察到的就是您应该观察到的。

这是基于 REST 的 HTTP 服务的标准。如果记录不存在,您会从服务中获得 HTTP 404

Azure 移动服务只不过是 Web API 和应用程序包装(管道)代码的组合。每次 Web API 调用不存在的记录都会导致 HTTP 404 错误。

正如评论中所说,您应该将代码包裹在 try - catch 块周围并检查异常。

.NET 4.5/4.6 中有新的 HttpClient type along with HttpResponseMessage and HttpRequestMessatge. The former has EnsureSuccessStatusCode() 方法。其中,如果调用将触发异常。

在旧版本的 Framework 中有 WebClient class,如果 HTTP 状态代码不是 200,则会抛出异常。

所以,再一次,在最后 - 你观察到绝对正常的行为。只需要多读一点关于 HTTP REST services, HTTP VERBS and HTTP Status Codes 的内容。然后还要了解您使用的特定框架 (.NET) 如何处理 HTTP 状态代码。