【发布时间】:2020-08-17 15:35:00
【问题描述】:
当 OData 查询中给出的参数没有找到结果时 - 您将如何处理返回的空值。如果碰巧没有结果,或者我只是返回 null 而不进行搜索,我会收到此异常。
错误:无法序列化空“资源”
应用程序引发了未处理的异常。 System.Runtime.Serialization.SerializationException:无法序列化 一个空的“资源”。在 Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSerializer.WriteObjectInline(对象 图,IEdmTypeReference 预期类型,ODataWriter 写入器, ODataSerializerContext writeContext) 在 Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSerializer.WriteObject(对象 graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) 在 Microsoft.AspNet.OData.Formatter.ODataOutputFormatterHelper.WriteToStream(类型 类型、对象值、IEdmModel 模型、ODataVersion 版本、Uri baseAddress、MediaTypeHeaderValue 内容类型、IWebApiUrlHelper internalUrlHelper,IWebApi
我希望它返回一个空结果和一个 204 代码 - 但它返回一个带有 200 代码的空结果并在控制台中引发异常。
以下是控制器的一些示例代码:
[EnableQuery]
[ODataRoute("Topic/{id}")]
public TopicDto? GetTopic(string id)
{
return _dbTableContext.Topic.Find(id);
}
【问题讨论】:
-
为什么要返回 204 状态码?
-
@prd 204 表示请求正常,但未找到内容。我可以忍受 200 和空的结果,但我需要摆脱控制台中的异常。
-
不,204 仅表示“无内容”,这将是通过 POST 成功创建对象的适当响应代码,在这种情况下,根据 REST,404 是正确的。
-
知道了。关于异常处理的任何想法?
-
希望SO 帖子上的解决方案可以帮助您。