首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从WebAPi调用REST服务和传输HttpResponseMessage

从WebAPi调用REST服务和传输HttpResponseMessage
EN

Stack Overflow用户
提问于 2017-06-01 12:25:37
回答 2查看 3.2K关注 0票数 0

我必须从Web调用REST服务。调用和检索数据运行良好,但返回方法崩溃。我尝试过几种返回async HttpResponseMessage的方法,但是我也可以返回这个对象( chrome ERR_SPDY_PROTOCOL_ERROR上的错误套接字)。我也试过用一个普通的json作为字符串,但不再成功。

在这里,一些尝试:

代码语言:javascript
复制
    [Route("{id}")]
    public async Task<JObject> Get(string id)
    {
        dynamic client = new RestClient($"https://...../accounts/{id}/summary",
            new Dictionary<string, string> {
                //some KVP for access Rest API
            });
//await client.Get() returns HttpResponseMessage 200 and Content is well populated

        JObject result =  JObject.FromObject(await client.Get());
        return result;
        //Request.CreateResponse(HttpStatusCode.OK, await result.Content.ReadAsAsync<string>());

        //HttpResponseMessage result = await client.Get(); => HttpResponseMessage is well filled
        //Request.CreateResponse(HttpStatusCode.OK, await result.Content.ReadAsAsync<string>()); => test with wrapping inside a new HttpResponseMessage but no more success



        //using (var client = new HttpClient())
        //{
        //    client.BaseAddress = new Uri($"https://....../v1/accounts/{id}/summary");
        //    client.DefaultRequestHeaders.Accept.Clear();
        //    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


        //    HttpResponseMessage response = await client.GetAsync("");
        //    return Request.CreateResponse(HttpStatusCode.OK, response.Content.ReadAsAsync());
        //}
    }

是否有一种简单的方法从Rest服务中检索json并按原样进行传输?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-02 08:11:25

如果这些调用是在Web中执行的,并且没有将逻辑应用于JSON对象,那么在返回JSON对象之前不需要解析它,因为当返回时它将再次序列化,您可以在前端应用程序上解析它并在那里执行您的逻辑。

HttpClient有一个将响应体作为字符串返回的方法,这是GetStringAsync。当主体作为字符串返回时,您可以在HttpResponseMessage中直接返回

下面是一个使用HttpClient注释代码的示例。

代码语言:javascript
复制
[Route("{id}")]
public async Task<HttpResponseMessage> Get(string id)
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri($"https://....../v1/accounts/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        // Fetch the response body as a string
        // Resource URI added below
        string responseContent = await client.GetStringAsync($"{id}/summary");

        // Create our response object and set the content to its StringContent
        var response =
            new HttpResponseMessage(HttpStatusCode.OK) {Content = new StringContent(responseContent)};

        // Return our HttpResponseMessage containing our json text
        return response;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2017-06-02 07:42:53

如果您只想从另一个API传输json响应,可以使用Web中的代码,如下所示:

代码语言:javascript
复制
[HttpGet]
    [Route("v1/test", Name = "test")]
    public HttpResponseMessage GetTest()
    {
        UriBuilder uriBuilder = new UriBuilder($"https://...../...");
        var webRequest = (HttpWebRequest)WebRequest.Create(uriBuilder.Uri);
        webRequest.Method = "GET";
        webRequest.ContentType = "application/json; charset=utf-8";
        webRequest.Accept = "application/json, text/javascript, */*";
        using (var jsonResponse = (HttpWebResponse) webRequest.GetResponse())
        {
            var jsonStream = jsonResponse.GetResponseStream();

            MemoryStream ms = new MemoryStream();
            jsonStream.CopyTo(ms);
            ms.Position = 0;
            HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
            response.Content = new StreamContent(ms);
            response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
            return response;
        }            
    }

当只需要支持身份验证或授权特性时,我更愿意使用API管理器,而不是自己维护这类代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44307498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档