大家晚上好。尝试为我的项目实现 Api 版本控制。面临接收请求的默认错误模板响应的问题。 查看代码1
{
"error": {
"code": "UnsupportedApiVersion",
"message": "The HTTP resource that matches the request URI 'https://localhost:5003/v2.3' does not support the API version '2.3'.",
"innerError": null
}
}
但我有自己的错误响应模板想要接收。
{
"traceId": "0HMF1NONVN8SF:00000002",
"errors": [
{
"message": "",
"source": ""
}
]
}
据我了解,我可以实现自己的 ErrorResponseProvider,但我可以避免这样做吗?
如何禁用 ApiVersionOptions 的 ErrorResponse? 我的api版本配置:
services
.AddApiVersioning(opt =>
{
opt.ApiVersionReader = new UrlSegmentApiVersionReader();
opt.UseApiBehavior = false;
opt.DefaultApiVersion = ApiVersion.Default;
opt.AssumeDefaultVersionWhenUnspecified = true;
})
.AddVersionedApiExplorer(opt =>
{
opt.GroupNameFormat = "'v'VV";
opt.SubstituteApiVersionInUrl = true;
});
版本:
.NET 6
ASP.NET Core 6
Microsoft.AspNetCore.Mvc.版本控制 5
最佳答案
实际上我没有找到禁用它的方法。但是,我找到了适合我的情况的解决方案。首先,我为 ErrorResponses 实现了 CustomErrorResponseProvider。
public class CustomErrorResponseProvider : DefaultErrorResponseProvider
{
public override IActionResult CreateResponse(ErrorResponseContext context)
{
switch (context.ErrorCode)
{
case "UnsupportedApiVersion":
throw new UnsupportedApiVersionException("Url", context.Message);
}
return base.CreateResponse(context);
}
}
然后开始抛出必要的异常。仅此而已!
由于我的中间件看起来像 this(下面的图片),我的 ErrorHandlingMiddleware 没有捕获异常,因为它是由默认 api 版本控制错误处理程序生成的。
关于c# - 如何禁用 Api 版本控制的默认错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70884017/