c# - 如何序列化/反序列化客户端库的 dotnet 核心异常?
问题描述
在 dotnet core v3 和 v5 中,我注意到我无法成功序列化异常。如果我尝试我得到这个
这是由于System.Type
TargetSite.DeclaryingType 属性。这是在 v5 中,但在 v3 中,序列化只是爆炸了,因为它达到了 32 的最大深度(并且增加到 128 个作品,但仍然具有奇怪的周期性行为)。
我的情况似乎很简单。我有一个应用程序异常FooNotFoundException
,我想在我的控制器中捕获和处理,例如:
public IActionResult Test()
{
try
{
// try to do something
}
catch(FooNotFoundException e)
{
return NotFound(e);
}
}
然后我有一个客户端库,我想基本上查找此端点的状态代码 404,然后反序列化为此异常类型,以便消费者在调用此端点时也可以处理此异常。在我看来,这似乎非常直接并且受到追捧,所以我很震惊地无法找到任何关于如何正确序列化和反序列化这样的基本Exception
跨网络边界的本机 MS 文档,而无需完全实现对自定义的翻译DTO。
好奇是否有人在 .NET Core v3 或 v5 中找到了一种优雅的方法来执行此操作?
解决方案
我在评论中输入了这个,但它不适合......
如果一些基本信息,如消息、帮助链接、.. 是一些想要的东西,.. 建立我们自己的响应标准怎么样?...像这样
// On some upper middleware catching exceptions
if (_environment.IsDevelopment())
{
var exceptionDetail = new Dictionary<string, string>()
{
{"Type", exception.GetType().ToString()},
{"Message", exception.Message},
{"StackTrace", exception.StackTrace}
};
foreach (DictionaryEntry data in exception.Data)
exceptionDetail.TryAdd(data.Key.ToString(), data.Value?.ToString());
responseResult.Error.ExceptionDetail = exceptionDetail;
}
return context.Response.WriteAsync(JsonConvert.SerializeObject(responseResult,
new JsonSerializerSettings()
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
}));
我认为它足够紧凑,可以让像 spa 这样的客户处理一些细节
推荐阅读
- c# - 无法在 Azure DevOps 发布管道中提取 .NET 单文件应用程序
- javascript - Javascript - 优化算法(复杂数据结构)
- java - BigTable ReadModifyWriteRow 支持映射函数
- angular - 如何在没有全局 URL 和变量的情况下以角度加载外部脚本
- google-chrome - 网站不断提示用户输入用户名和密码,并且不允许他们进入
- python - 第一次迭代后循环停止
- r - R/Shiny App 将绘图写入 RStudio 中的绘图视图而不是 Shiny UI
- javascript - 如何正确缓存 webaudio 对象?
- regex - 正则表达式避免 {{ 和 }} 之间的所有单词
- javascript - 为什么在 wordpress 中使用 PhotoSwipe 时出现错误?