收到 HttpResponseMessage OK 时出错
Error receiving a HttpResponseMessage OK
我遇到了问题。我有 2 个 WebApi。 webapi2 从 DB 和 return 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 可以工作 return 我的图片:
//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 个值...您必须使用
在 webapi 1 上
var MIRACLE = Uri.EscapeDataString(exemplo);
并且在 webapi2
var MIRACLE2 = Uri.UnescapeDataString(MIRACLE)
根据您的代码,网络 api 1 将仅接受媒体类型 = "application/json"。
这是因为您添加了以下代码:
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
因此,要么删除代码行,要么将其从 "application/json" 更改为 "image/jpeg"。
我遇到了问题。我有 2 个 WebApi。 webapi2 从 DB 和 return 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 可以工作 return 我的图片:
//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 个值...您必须使用
在 webapi 1 上
var MIRACLE = Uri.EscapeDataString(exemplo);
并且在 webapi2
var MIRACLE2 = Uri.UnescapeDataString(MIRACLE)
根据您的代码,网络 api 1 将仅接受媒体类型 = "application/json"。 这是因为您添加了以下代码:
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
因此,要么删除代码行,要么将其从 "application/json" 更改为 "image/jpeg"。