我遇到了问题。我有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);
}
答案 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”。