【问题标题】:Http GET call to API endpoint with complex object from MVC controller使用 MVC 控制器的复杂对象对 API 端点进行 Http GET 调用
【发布时间】:2017-08-24 18:52:00
【问题描述】:

我必须从我在 NET Core 中创建的 API 检索订单。

检索是在我的 MVC 控制器使用 GET 调用另一个 NET Core APP 的端点的操作中进行的。

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 App 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。

如何通过 HttpClient 使用 GET 操作发送此对象?

【问题讨论】:

  • 如果您将所有参数放在查询字符串中,它们将被转换为 OrderSearchParametersModel 但它们需要与此模型属性名称匹配。
  • 使用 http GET 您无法发送对象。您可以发送的只是查询参数和标题字符串。通常,查询信息是通过@MichelAmorosa 提到的查询字符串发送的。
  • 谢谢@MichelAmorosa。我想把它放在一个 aswer 中,我可以选择它

标签: c# asp.net-core-mvc http-get asp.net-core-webapi


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2014-01-25
    • 2018-01-22
    • 1970-01-01
    • 2013-06-28
    • 2019-09-26
    相关资源
    最近更新 更多