当前位置: 首页 > 知识库问答 >
问题:

响应体不会从昂首阔步的Swashuckle中的自定义错误响应返回

阎晋
2023-03-14

我把招摇过市融入了一个点。net核心API应用程序使用Swashback。当我在不提供凭证的情况下通过Swagger UI执行API时,它会像预期的那样返回“401-Unauthorized”响应。

但是它没有显示我已经配置为作为主体返回的自定义错误响应的错误响应。它确实返回标题如下图。

当我通过Postman执行相同的API时,它会返回如下自定义错误响应。

我需要的是,我还需要在swagger UI中查看自定义错误响应主体。

403和404状态代码的情况相同。

共有1个答案

杭泉
2023-03-14

经过一番挣扎,我找到了问题的根源。这是由于没有在“应用”中配置响应内容类型。UseStatusCodePages”中间件。

  // Custom status handling
        app.UseStatusCodePages(async (StatusCodeContext context) =>
        {
            var settings = new JsonSerializerSettings();
            settings.NullValueHandling = NullValueHandling.Ignore;
            settings.Formatting = Formatting.Indented;

            int statusCode = context.HttpContext.Response.StatusCode;
            ***context.HttpContext.Response.ContentType = "application/json";*** // Added this line to solve the issue

            await context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject(
                new ErrorResponse((HttpStatusCode)statusCode,
                ReasonPhrases.GetReasonPhrase(statusCode)
                ), settings));
        });

必须添加“context.HttpContext.Response.ContentType=“application/json”来解决这个问题。

 类似资料:
  • 我试图显示一个自定义容器,作为一个成功的响应。我无法描述这方面所需的模型 THIS Paged响应信息实际上是一个自定义集合 如果其中包含一个Report对象集合,如何指定容器?有人能帮帮我吗?我在Spring引导中使用springfox swagger-2.9.2

  • 问题内容: 我想知道如何用昂扬的方式记录枚举。 根据JavaDoc 数据类型。请参阅文档以获取受支持的数据类型。如果数据类型是自定义对象,请设置其名称,或不设置任何名称。如果是枚举,请为枚举常量使用’string’和allowableValues。 但是我没有找到一些好的Java示例如何真正使用它,规范在这里。 第一服务 第二服务 输入项 天 输出量 pom.xml 您可以在此处查看结果。 我看到

  • Apache可以让网站管理员自己自定义对一些错误和问题的响应。 自定义的响应可以定义为当服务器检测到错误或问题时才被激活。 如果一个脚本崩溃并产生"500 Server Error"响应,那么这个响应可以被更友好的提示替换或者干脆用重定向语句跳到其他的URL(本地的或外部的)。 行为 老式的行为 Apache1.3 会响应一些对于用户没有任何意义的错误或问题信息,而且不会将产生这些错误的原因写入日

  • 数据类型。有关支持的数据类型,请参见文档。如果数据类型是自定义对象,请设置它的名称,或者不设置任何名称。对于枚举,使用'string'和allowableValues作为枚举常量。 但是我没有找到一些好的Java示例如何真正使用它,规范在这里。 你可以在这里看到结果。 我认为是个问题... 你知道吗?

  • 问题内容: 我正在尝试使用swagger定义post端点,但是不允许使用该参数: 当我跑步时,我得到这个: 我的规格有什么问题? 问题答案: 您可能正在混合使用OpenAPI / Swagger 2.0和OpenAPI 3.0语法。您的规格似乎是2.0,但是关键字是3.0功能。在2.0中,请求正文被定义为正文参数: 更多信息:描述请求正文

  • 我试图用大摇大摆的方式来模拟REST API..我目前创建了nodejs项目,其中默认的js appreas是。/api/controllers/hello_world.js中的hello_world.js。 现在我想创建一个新的控制器,并将其引用到我的YAML,即来自SwaggerUI..我怎么做?任何链接都会很有用。