【问题标题】:Response wrapper in Asp.net Core Web ApiAsp.net Core Web Api 中的响应包装器
【发布时间】:2020-04-01 05:52:57
【问题描述】:

我已经按照下面链接中显示的 alltej 的回答构建了一个响应包装器:

How can I wrap Web API responses(in .net core) for consistency?

当在 api 调用后尝试读取响应的内容时,我得到以下信息。示例 json 是参数中的值。

response = await _apiClient.GetAsync("search/getParameter");
parameters = await response.Content.ReadAsStringAsync();

{"Version":"1.0","StatusCode":404,"ErrorMessage":"Request not found. The specified uri does not exist","Result":null} 

如何使 response.Content 指向 JSON 中的“结果”。

我错过了什么吗?

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    您可以尝试使用AutoWrapper 来获得Http 响应的一致性,并使用AutoWrapper.Server 在服务器上解包Result 属性。

    【讨论】:

    • 自动包装器是否与 xml 输出兼容?如果我想要 xml 输出,我不能让它工作
    • 没有。 AutoWrapper 目前不支持 XML。请提交功能请求,以便我们在未来的版本中添加对它的支持。
    【解决方案2】:

    默认情况下,ASP.NET Core 应用不提供 HTTP 状态代码的状态代码页,例如 404 - Not Found。应用返回一个状态码和一个空的响应正文。

    您可以在中间件中自定义它,例如:

    var readToEnd = new StreamReader(memoryStream).ReadToEnd();
    
    if (context.Response.StatusCode == StatusCodes.Status404NotFound)
    {
        readToEnd += "{ \"result\":\"Not Found\" }";
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-23
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 2020-07-06
      • 2018-05-23
      • 2021-04-22
      相关资源
      最近更新 更多