【发布时间】:2016-10-27 14:27:22
【问题描述】:
我遇到了问题。我有 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);
}
【问题讨论】:
-
您是否检查过系统事件日志和任何应用程序日志以了解导致 500 的原因?他们被调用的 API 很可能引发了异常。确保您不只是使用 try {} catch {} 丢弃异常,并确保使用 try catch 将方法包装在 API 中,该 try catch 将任何异常记录到文件系统以帮助进行故障排除。祝你好运!
-
@MurrayFoxcroft 我编辑了帖子!所以,是的,我正在使用try catch。问题是 webapi 的响应正常并返回图像......当其他 webapi 收到这个时,这就是问题所在。我不知道这些日志在哪里。
-
啊,所以其他WebApi不在你的控制之下?您需要去找供应商/所有者并要求他们检查他们的日志。 500 通常是 API 中未处理的错误。如果您的数据不正确或调用不正确,它应该(如果构建正确)只返回 400 ish 范围内的内容,例如错误请求。但是 500 靠近终点站,有什么东西撞到了他们身边。
-
@MurrayFoxcroft 不不,在我的控制之下!我要告诉你的是 webapi 没有错误!如果我在浏览器上调用这个 webapi(2),我得到了图像......但是如果调用一个调用这个 webapi(2) 的 webapi(1),我不明白。 IsSuccessStatusCode 为假,我收到错误 500。
标签: c# asp.net-web-api controller httpresponse