繁体   English   中英

C#.NET web api从发布请求返回

[英]C# .NET web api return from post request

我正在向返回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)
            {
                ...
            }
        }
    }

我怎样才能获得确切的内容?

您需要阅读响应中的内容。

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;
}

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

尝试将return语句更改为

[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是您的对象类型。

等等...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM