- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在设置 ProducesResponseType,以便用 Swagger 记录它。
如果响应成功(OK => 200),那么它会生成一个 IEnumerable。
[ProducesResponseType(typeof(IEnumerable<MyModel>), 200)]
但是当我遇到异常时,我会捕获它,然后生成我的自定义 APIError 类的对象。当我填充对象时,我可以设置不同的 HttpStatusCodes,但最后,我想要的是能够将 ProducesResponseType 设置为我的 APIError 类,用于所有剩余的 HttpStatusCodes。我的意思是,我可以获得 BadRequest、ServerInternalError、Forbidden 等,但它们都将具有相同的响应类型 (ApiError)。有没有办法为所有错误的http代码设置这行代码?还是需要一个一个设置?
[ProducesResponseType(typeof(ApiError), ???)]
最终结果应该是这样的:
[ProducesResponseType(typeof(IEnumerable<MyModel>), 200)]
[ProducesResponseType(typeof(ApiError), AllFailureHttpCodes)]
最佳答案
我担心这是不可能的,至少不是每个 Action 。
IApiResponseMetadataProvider
(参见 here)只有一个 int StatusCode { get;
属性已定义,它用于 ProducesAttribute
和 ProducesResponseTypeAttribute
。
但是,在您的特殊情况下,您可以将其注册为全局过滤器,因为无论是 GET、POST、PUT 还是 DELETE,所有操作的错误结果都应该相同。
services.AddMvc(options =>
{
options.Filters.Add(new Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute(typeof(ApiError), 400));
options.Filters.Add(new Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute(typeof(ApiError), 401));
options.Filters.Add(new Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute(typeof(ApiError), 409));
});
然后这些应该应用于您的 MVC/WebAPI 应用程序中的每个操作。
但是,我个人认为这种用法是错误的,因为它表明您的每个方法都可以处理这些类型的错误。例如 409 是专门针对冲突的,在您使用它的 WebAPI 中,当更新资源时出现错误,即当使用乐观并发时,记录被另一个用户更改,因此记录的版本被更改并且更新失败.
将这些添加到每个方法都是错误的。如果您的操作确实处理了此状态代码,则您应该只添加状态代码。例如,409 仅适用于 PUT 和 POST 方法。其中 404 可能适合 GET 和 PUT(更新),但不太适合 POST(插入)。
这尤其糟糕,当你使用诸如 Swagger 之类的工具生成 Api Docs 时,你只会得到一个错误的文档。您应该将 ProducesResponseType
视为一种文档形式,因此不应使用过于通用的方法。
在 ASP.NET Core 2.2 中,Swagger API 支持得到了极大改进,这还包括 convention based响应类型和代码。
它已经带有一组很好的默认约定,但您也可以覆盖它并提供您自己的约定方法。
关于c# - 为多个 HttpStatusCodes 设置一个 ProducesResponseType typeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43153621/
HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync(); HttpStatusCode statusC
我正在尝试引发 HttpResponseException,如该截屏视频中所述(大约 1 分钟) throw new HttpResponseException(HttpStatusCode.Unau
假设我有以下变量: System.Net.HttpStatusCode status = System.Net.HttpStatusCode.OK; 如何检查这是成功状态码还是失败状态码? 例如,我可
我正在编写 XUnit 测试用例。我收到以下错误 Error CS1061 'HttpStatusCode' does not contain a definition for 'Should' an
我正在编写 XUnit 测试用例。我收到以下错误 Error CS1061 'HttpStatusCode' does not contain a definition for 'Should' an
我希望返回 202 - HttpStatusCode.Accepted - 以及一个字符串值。 这怎么写: [HttpPost] public async Task Post() { retu
无论如何我们可以在异常捕获时获取 HttpStatus 代码吗?异常可能是 Bad Request、408 Request Timeout、419 Authentication Timeout?如何在
我正在对一个简单的 Controller 进行单元测试,检查在传入空 ID 时它是否返回 400 代码。但是,当我对此进行测试时,返回的结果并不等于 400 错误代码。 我的代码: int? null
在我的使用 ssl 与服务器通信的 Windows Phone 应用程序中出现了一些问题。对于从服务器 HttpStatusCode.NotFound 收到的每个请求客户端。我该如何解决这个问题? 在
根据 IANA registry还有更多标准状态代码,例如 507 (InsufficientStorage)。我正在编写一个 webdav 服务器库,并且在我的类中使用 HttpStatusCode
我们已经使用 WCF 编写了一个 Restful 服务,现在正在尝试编写 FitNesse 测试来验证该服务的行为。 一个测试是如果找不到资源则返回 404 状态码。 问题是我们找不到一种机制来使用允
如果我将客户端连接到的服务指向一个错误的 URL,为什么我得到的 HttpStatusCode 为 0。 我的 statusCodeAsInt 显示为 0。为什么它没有显示为 404 并被处理? IR
我想知道是否有更简单的方法(更好的方法)来检查 500 状态代码? 我能想到的唯一方法是: var statusCodes = new List() { HttpStatusCode.BadGat
我正在使用 .NET MVC。 当我回来时new HttpResult(HttpStatusCode.NoContent);创建的对象具有状态代码 = 200: {ServiceStack.Commo
我正在尝试使用 ServiceStack.Razor 运行一个最小的应用程序,但我在运行 CustomHttpHandler 时遇到了问题。我已按照说明进行操作 here和 here ,但它无法正常工
这个问题在这里已经有了答案: Getting Http Status code number (200, 301, 404, etc.) from HttpWebRequest and HttpWe
我正在使用 ASP.NET MVC 4,我需要返回状态代码 420,这在 HttpStatusCode 枚举值中找不到。 通常这很简单,你可以这样做: return Request.CreateRes
我正在编码 C# WebApi 2 webservice,我有一个关于返回 HttpStatusCode 的问题来自 IQueryable网络服务功能。 如果网络服务函数返回单个对象,则可以轻松使用以
我正在设置 ProducesResponseType,以便用 Swagger 记录它。 如果响应成功(OK => 200),那么它会生成一个 IEnumerable。 [ProducesRespons
根据以下网站,您可以将异常参数传递给 HttpResponseMessage.CreateErrorResponse 方法 ( https://msdn.microsoft.com/en-us/lib
我是一名优秀的程序员,十分优秀!