【问题标题】:C# .NET web api return from post requestC# .NET web api 从 post 请求返回
【发布时间】:2017-11-07 07:43:47
【问题描述】:

我正在向返回 JSON 数据的路由发出 POST 请求。

    [HttpPost("api/v1/testGetAll")]
    public object Test([FromBody]object filteringOptions)
    {
        return myService.GetLogs(filteringOptions).ToArray();
    }

路由工作正常,过滤工作正常,当我在 Postman 中测试路由时,我得到了正确的响应。然而,这只是一个后端,我想从我的自定义 API 网关调用这个路由。

我面临的问题是获得准确的回复。相反,我得到了成功状态、标头、版本、请求消息等。

    public object TestGetAll(string ApiRoute, T json)
    {
        Task<HttpResponseMessage> response;
        var url = ApiHome + ApiRoute;
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(url);
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            try
            {
                response = client.PostAsync(url, new StringContent(json.ToString(), Encoding.UTF8, "application/json"));

                return response.Result;
            }
            catch (Exception e)
            {
                ...
            }
        }
    }

如何获取准确的内容?

【问题讨论】:

    标签: c# .net json api


    【解决方案1】:

    您必须将响应作为 HttpResponseMessage 返回。

    尝试将您的退货声明更改为

    [HttpPost("api/v1/testGetAll")]
    public IHttpActionResult Test([FromBody]object filteringOptions)
    {
        return Ok(myService.GetLogs(filteringOptions).ToArray());
    }
    

    请注意:这将返回状态码为 200 的响应。如果您想根据不同的响应码处理响应。您可以像这样创建 HttpResponseMessage-

    Request.CreateResponse<T>(HttpStatusCode.OK, someObject); //success, code- 200
    Request.CreateResponse<T>(HttpStatusCode.NotFound, someObject); //error, code- 404
    

    T 是你的对象类型。

    等等……

    【讨论】:

    • 你的意思是IActionResult?如果是这样,它返回相同的
    • 您是否将响应反序列化回 Array?同时显示您在 Postman 中获得的内容。
    【解决方案2】:

    您需要从响应中读取内容。

    var contentString = response.Result.Content.ReadAsStringAsync().Result;
    

    如果您愿意,您可以将字符串响应反序列化为您想要返回的对象。

    public async Task<TResult> TestGetAll<TResult>(string apiRoute, string json)
    {
        // For simplicity I've left out the using, but assume it in your code.
    
        var response = await client.PostAsJsonAsync(url, json);
    
        var resultString = await response.Content.ReadAsStringAsync();
    
        var result = JsonConvert.DeserializeObject<TResult>(resultString);
    
        return result;
    }
    

    【讨论】:

    • 我知道这是旧的,但浅灰色说明使用被遗漏了让我们中的一些人更难。我投了赞成票,因为它有帮助:) .. 很多
    猜你喜欢
    • 2015-08-14
    • 2016-04-10
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2017-09-27
    相关资源
    最近更新 更多