收到HttpResponseMessage时出错确定

时间:2016-10-27 14:27:23

标签: c# asp.net-web-api controller httpresponse

我遇到了问题。我有2个WebApi。 webapi2从DB获取数据并返回IMAGE。在这里,它的确定和工作。如果我尝试使用浏览器,请向我显示图像或者如果我更改了字节数组。 问题在于调用此webapi2的Webapi1。对于IsSuccessStatusCode,我总是收到带有false的HttpResponseMessage。错误是500内部服务器错误。 我是新手,我不知道该怎么做......我已经尝试了很多东西

public async Task<HttpResponseMessage> GetFoto(string exemplo, string exemple2)
        {
            HttpClientHandler handler = new HttpClientHandler()
            {
                UseDefaultCredentials = true,
            };
        using (var client = new HttpClient(handler))
        {

            client.BaseAddress = new Uri("http://192.111.56.1:1762/");

            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = await client.GetAsync("api/Tr/Test?exemplo="+exemplo+"&pk="+pk+"");

            if (response.IsSuccessStatusCode)
            {
                var data = response.Content.ReadAsByteArrayAsync().Result;
                var stream = new MemoryStream(data);
                response.Content = new StreamContent(stream);
                response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");

                return response;
            }
            else
            {

                Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
                return null;
            }


        }
    }

我的webapi工作,并给我一个图像:

  //connections code that doesn´t matter....

            try
            {

                HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
                var stream = new MemoryStream(imgBytes);
                result.Content = new StreamContent(stream);
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");

                return result;

            }

            catch (Exception ex)
            {
                return Request.CreateResponse(HttpStatusCode.Gone);
            }

2 个答案:

答案 0 :(得分:0)

错误是因为当你在浏览器上传递一个值时,他们会更改一些carachters ...所以,你传递的是2个值...你必须使用

在webapi 1上

var MIRACLE =  Uri.EscapeDataString(exemplo);

在webapi2

var MIRACLE2 = Uri.UnescapeDataString(MIRACLE)

答案 1 :(得分:0)

根据您的代码,web api 1将只接受media type =“application / json”。 这是因为您添加了以下代码:

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

因此,要么删除代码行,要么将其从“application / json”更改为“image / jpeg”。