Web api dotnet core 中的 Api 版本控制错误的自定义错误响应
Posted
技术标签:
【中文标题】Web api dotnet core 中的 Api 版本控制错误的自定义错误响应【英文标题】:Customized error responses for ApiVersioning errors in webapi dotnet core 【发布时间】:2018-08-13 22:26:55 【问题描述】:我正在为 Webapi 服务中的所有错误创建一个包库。该库将用于为 BadRequest、BadArgument、ApiVersionsing 等相关错误提供自定义响应。我需要帮助自定义与 ApiVersion 相关的错误 - ApiVersionUnspecified、UnsupportedApiVersion、InvalidApiVersion、AmbiguousApiVersion。我已经按照这篇文章为我的项目添加了 api-versioning - https://www.hanselman.com/blog/ASPNETCoreRESTfulWebAPIVersioningMadeEasy.aspx
我已经检查了上述包的 github wiki,发现“根据所需的行为,您可以扩展 DefaultErrorResponseProvider 或者您可以从 stratch 实现自己的 IErrorResponseProvider。
要连接备用错误响应行为,请将默认提供程序替换为您自己的:"
options => options.ErrorResponses = new MyErrorResponseProvider();
但是;我不太明白如何在 MyErrorResponseProvider 类中自定义默认错误响应。有人可以为我提供任何示例,以便我可以开始使用吗?
提前致谢!
【问题讨论】:
【参考方案1】:找到了上面的实现方式——
class MyErrorResponseProvider : DefaultErrorResponseProvider
// note: in Web API the response type is HttpResponseMessage
public override IActionResult CreateResponse( ErrorResponseContext context )
switch ( context.ErrorCode )
case "UnsupportedApiVersion":
context = new ErrorResponseContext(
context.Request,
context.StatusCode,
context.ErrorCode,
"My custom error message.",
context.MessageDetail );
break;
return base.CreateResponse( context );
感谢github问题@-https://github.com/Microsoft/aspnet-api-versioning/issues/233
【讨论】:
还应该提到的是,这只是自定义了默认错误响应负载的信息。如果要更改所有内容,则需要返回 IActionResult 的任何实现。这可以包括您自己的自定义错误响应负载。【参考方案2】:答案仅自定义 ASP.NET API 版本控制返回的错误消息。
要自定义整个响应,您可以通过返回 ObjectResult 来实现它。
Startup.cs
// Add API Versioning to the service container to your project
services.AddApiVersioning(config =>
// Advertise the API versions supported for the particular endpoint
config.ReportApiVersions = true;
config.ErrorResponses = new ApiVersioningErrorResponseProvider();//Send standard error response when API version error.
);
ApiVersioningErrorResponseProvider.cs
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Versioning;
public class ApiVersioningErrorResponseProvider : DefaultErrorResponseProvider
public override IActionResult CreateResponse(ErrorResponseContext context)
//You can initialize your own class here. Below is just a sample.
var errorResponse = new
ResponseCode = 101,
ResponseMessages = "Something went wrong while selecting the api version",
HelpLink = "https://github.com/microsoft/aspnet-api-versioning/wiki/Error-Response-Provider"
;
var response = new ObjectResult(errorResponse);
response.StatusCode = (int)HttpStatusCode.BadRequest;
return response;
产生以下输出:
"ResponseCode": 101,
"ResponseMessages": "Something went wrong while selecting the api version",
"HelpLink": "https://github.com/microsoft/aspnet-api-versioning/wiki/Error-Response-Provider"
【讨论】:
以上是关于Web api dotnet core 中的 Api 版本控制错误的自定义错误响应的主要内容,如果未能解决你的问题,请参考以下文章
dotnet core webapi json-api 兼容查询字符串路由
如何在 dotnet core web api 中设置起始页?
dotnet core docker web api没有连接
如何在 dotnet core Web Api 中返回自定义错误消息