Asp.net web api 当WebApi序列化失败时,我希望异常冒泡出现,而不是null我的参数

Asp.net web api 当WebApi序列化失败时,我希望异常冒泡出现,而不是null我的参数,asp.net-web-api,json.net,Asp.net Web Api,Json.net,我有一些自定义转换器,它们已添加到我的WebApi项目的序列化设置中。当我在其中一个转换器中抛出异常时,仍然会收到对操作的调用。根据发生故障的转换器,body参数可以为null或默认值集。我遗漏了什么可以导致webapi抛出该错误,以便我可以在更全局的级别上处理它 webapi verison:4.0.30506 json.net版本:5.0.8我也遇到了同样的问题(但有一个解决方法)。您可以将一个标志放入http上下文中,稍后在web api中访问它并在那里处理它。不能从自定义序列化程序引发异

我有一些自定义转换器,它们已添加到我的WebApi项目的序列化设置中。当我在其中一个转换器中抛出异常时,仍然会收到对操作的调用。根据发生故障的转换器,body参数可以为null或默认值集。我遗漏了什么可以导致webapi抛出该错误,以便我可以在更全局的级别上处理它

webapi verison:4.0.30506

json.net版本:5.0.8

我也遇到了同样的问题(但有一个解决方法)。您可以将一个标志放入http上下文中,稍后在web api中访问它并在那里处理它。不能从自定义序列化程序引发异常并在web api中捕获它。如果您试图克服这个问题,它只会忽略异常,并强制执行ReadJson函数,直到函数结束

您可以将其用于http上下文 HttpContext.Current.Items[“错误信息”]=“一些错误信息”

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer){
     ...            
     throw new Exception();
     ...

     ///comes here to the end directly                     
    }

如果您使用的是owin web api,则HttpContext.Current为null。您可以使用此包-OwinRequestScopeContext,它允许您使用同样针对每个请求的上下文

例如,在JsonConverter中设置错误:

OwinRequestScopeContext.Current.Items["error"] = exception;
然后获取控制器中的错误:

var ex = OwinRequestScopeContext.Current.Items["error"] as Exception;

通常,
ModelState
设置了与反序列化相关的错误,因此您可以返回带有ModelState信息的
400错误请求
,这可以让客户端知道发生了错误。