如果在Dotnet Core中为WebApi提供了无效的类型,是否有一种返回自定义错误响应的机制?
例如
如果我有一个像这样的类
public class SomeApiClass
{
public int Id { get; set; }
}
但是像这样发出一个post请求(注意,我期望一个int并给出一个字符串):
{
"id": "f"
}
然后标准的dotnet响应看起来像这样:
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-27be45d9cffab14698524a63120a4f88-6bfe2613f2328a42-00",
"errors": {
"$.id": [
"The JSON value could not be converted to System.Int64. Path: $.wmdaid | LineNumber: 1 | BytePositionInLine: 15."
]
}
}
但是,我希望我的所有响应对于错误请求看起来都是一样的,这样任何实现API的人都可以得到一致的JSON。我的问题是JSON反序列化是在控制器验证之前完成的。
那么,简而言之,是否可以将此响应格式作为dotnet中间件的一部分进行更改?
4条答案
按热度按时间nc1teljy1#
您可以使用自定义ActionFilter。
Controller.cs
或全局注册Startup.cs
xwbd5t1u2#
您还可以配置JsonOptions,以便显示通用消息。
这将保留自动400响应(来自ValidationProblem)中的所有其他字段,并显示格式错误字段的一般错误消息:“输入无效。”
ss2ws0br3#
您可以实现自定义错误模型处理程序,并在每个场景中(例如错误请求或...)将其替换为默认ModelState对象。首先,更改服务提供程序以注入您的自定义错误类,如下所示:
接下来,我们将创建自定义的错误处理程序类:
最后,我们想要返回的自定义错误模型:
ddarikpa4#
.NET 6.0
您可以执行以下操作:
1.创建自定义验证属性:
PositiveInt32ValidationAttribute.cs
。1.创建自定义结果过滤器:
MyApiResultFilter.cs
。1.在
Program.cs
中注册此结果筛选器。下面是一个示例:
PositiveInt32ValidationAttribute.cs
MyApiResultFilter.cs
在Program.cs中注册MyApiResultFilter
结果
截图