【问题标题】:How to send status code with message .NET Core Web API如何使用消息 .NET Core Web API 发送状态代码
【发布时间】:2022-01-27 17:20:13
【问题描述】:

我正在处理两个 Web API 项目。我从一个 API 收到带有状态代码和消息的另一个 API 的响应。使用以下方法,我需要发送带有消息的状态码。

[HttpPost]
public async Task<string> CreateOrder(Order order)
{
        string jsonResponse = null;
        HttpClient client = new();

        var payload = new JsonPayloadBody();
        payload.Api = new Api();
        payload.Header = new OrderHeader();

        payload.Api.NAME = "CREATE";
        payload.Api.QUERY = "CREATE_ORDER";

        payload.Header.INTERFACE_RECORD_ID = order.INTERFACE_RECORD_ID;            
        payload.Header.INTERFACE_ACTION_CODE = order.INTERFACE_ACTION_CODE;                                                                               

        payload.LineItems.Add(li); }

        var orderPayload = JsonConvert.SerializeObject(payload);
        var payloadObj = JsonConvert.DeserializeObject<MHScaleMessage>(orderPayload);
        var requestPayload = payloadObj.ToJsonString();
        var stringContent = new StringContent(requestPayload, Encoding.UTF8, "application/json");
        HttpResponseMessage response = await client.PostAsync(_baseUrl, stringContent);

        if (response.IsSuccessStatusCode)
        {
             jsonResponse = await response.Content.ReadAsStringAsync();
            _logger.LogInformation(jsonResponse);
            _logger.LogInformation("Order created successfully");
        }
        else
        {         
            _logger.LogInformation("Order creation filed");
        }

        return jsonResponse;
}

使用这条线

jsonResponse = await response.Content.ReadAsStringAsync();

我能够向邮递员发送消息,但它总是发送 200 状态代码。所以我需要根据响应发送状态码,例如:

return NotFound 
return Ok 
return BadRequest

【问题讨论】:

    标签: .net-core asp.net-core-webapi


    【解决方案1】:

    这里是A Web ApiB Wen Api。您使用AB 获取带有状态码的响应。 A 的任务是获取B 的状态码。你也得到200状态码的原因是B的状态码,A总是能成功得到状态码,所以A总是返回200。

    如果您想添加来自 A 的不同响应消息,您可以添加一些代码,例如:

    if (response.IsSuccessStatusCode)
    {
         jsonResponse = await response.Content.ReadAsStringAsync();
         _logger.LogInformation(jsonResponse);
         _logger.LogInformation("Order created successfully");
    }
    else if(response.StatusCode == (System.Net.HttpStatusCode)404)
    {
         //..add NotFound message......
    }
    else if(response.StatusCode == (System.Net.HttpStatusCode)400)
    {
         //..add BadRequest message......
    }
          //......
    

    如果要返回状态码,可以添加如下代码

    [HttpPost]
    //if you want to get the status codo , you need to return a StatusCodeResult Class in your action 
    //so i change Task<string> to Task<IActionResult>
    public async Task<IActionResult> CreateOrder(Order order)
    {
        //......
    
        else if(response.StatusCode == (System.Net.HttpStatusCode)400)
            {
                 //if you want to use jsonResponse to do some logger,you can try this 
                 jsonResponse  = "BadRequest"
                 _logger.LogInformation(jsonResponse);
                 return BadRequest(jsonResponse  );
            }
    }
    

    注意:这里是使用上面的代码创建Badrequest时出现问题,当你从AWeb Api得到400状态码时,不知道是不是问题出在@ 987654334@或B

    【讨论】:

    • 您好,谢谢您的回答。如果我使用第二个选项。最后希望我可以返回我的意思是如果我使用它(返回 jsonResponse;)它的说法不能转换字符串。所以作为最后的回报,我能回报什么。
    • 嗨,@user17870723,您可以看到我将 Task 更改为 Task ,因此在此操作中,您不能只返回 string 类型的参数。我已经编辑了我的答案以给出更详细的解释。
    • 谢谢。我明白你的意思了。现在它的工作。感谢您的支持
    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 2023-03-06
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多