从 MVC 控制器向 API 端点发起 HTTP GET 调用并传递复杂对象

3

我需要从我的.NET Core API中检索订单。

检索是通过调用另一个NET Core APP的端点的MVC控制器操作来完成的,使用GET方法。

API端点如下:

API:

[HttpGet("orders/orderSearchParameters")]
    public IActionResult Get(OrderSearchParameters orderSearchParameters)
    {
        var orders = MenuService.GetMenuOrders(new GetMenuOrdersRequest { From = orderSearchParameters.From, To = orderSearchParameters.To, FoodProviderId = orderSearchParameters.FoodProviderId }).Orders;
        return Ok(orders);
    }

我的Web应用MVC控制器的一个操作必须调用那个端点,为此需要以下代码:

public IActionResult GetOrders(OrderSearchParametersModel orderSearchParameters)
    {
        var uri = string.Format(ApiUri + "menus/orders/");

        using (HttpClient httpClient = new HttpClient())
        {
            var response = httpClient.GetStringAsync(uri);
            if (response.IsCompleted)
            {
                var orders = JsonConvert.DeserializeObject<List<OrderModel>>(response.Result);
                return Ok(orders);
            }
            else
            {
                return BadRequest();
            }
        }            
    }

我找不到的是如何序列化OrderSearchParametersModel,以使用MVC控制器中的HttpClient执行GET操作。

在附加的代码中,我没有使用传入对象进行GET操作。

如何使用GET操作将此对象发送到HttpClient?


2
如果您将所有参数放在查询字符串中,它们将被翻译为一个OrderSearchParametersModel,但它们需要与此模型属性名称匹配。 - Michel Amorosa
1
使用HTTP GET请求时,您无法发送对象。您只能发送查询参数和标题字符串。通常,查询信息会通过查询字符串(如@MichelAmorosa所提到的)发送。 - RonC
1
谢谢@MichelAmorosa。如果您想把这个放在答案里,我可以选择它。 - Andres
1个回答

4
如果您将所有参数放在查询字符串中,它们将被转换为OrderSearchParametersModel,但需要与此模型属性名称匹配。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接