public HttpResponseMessage getLogoPath(int ID)
{
String urlsubfix = dataManager.getMobileLogoPath(ID);
String urlToReturn = PictureController.urlprefix +urlsubfix;
var response = Request.CreateResponse(HttpStatusCode.Redirect);
response.Headers.Location = new Uri(urlToReturn);
return response;
}
我希望有一个API调用来返回一个图像,我如何实现这个目的是重定向到另一个包含图像的链接,例如:
http://steve.files.wordpress.com/2006/03/Matrix%20tut%202.jpg
我正在尝试使用PostMan来测试它,它让我恢复了破碎的图像。我试着四处寻找,但仍无法找到解决方案。
-----编辑需要此代码的部分代码
public HttpResponseMessage GetCustomerBarCodeLogo(String ID)
{
Barcode BC = new Barcode();
Image img =BC.Encode(TYPE.CODE128, "123456789");
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
ImageConverter imageConverter = new ImageConverter();
byte[] resourceByteArray = (byte[])imageConverter.ConvertTo(img, typeof(byte[]));
MemoryStream dataStream = new MemoryStream(resourceByteArray);
result.Content = new StreamContent(dataStream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
return result;
}
这会返回一张损坏的图片。
------最新更新
我发现了问题。会发生什么是SSL基本身份验证存在问题。发生的情况是当客户端第一次想要传递请求时,验证设置正确。但是,当它尝试获取由内部代码触发的另一个请求之后的图像时,该请求没有autherizationHeader并且未经过身份验证。我不知道第二个事件在哪里被触发,所以我不知道如何手动设置该标题。
答案 0 :(得分:2)
您无法重定向回复此网址中的图片,您的来电者可以更改位置。
首先解决方案,尝试直接使用web api的图像结果,样本:
public HttpResponseMessage getLogoPath(int id)
{
string pathImage = // a way to get the imagem path..
// create response
HttpResponseMessage response = new HttpResponseMessage();
// set the content (image)
response.Content = new StreamContent(new FileStream(pathImage));
// set the content type for the respective image
response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png"); // or jpg, gif..
return response;
}
或使用移动状态代码,为smaple:
public HttpResponseMessage getLogoPath(int ID)
{
String urlsubfix = dataManager.getMobileLogoPath(ID);
String urlToReturn = PictureController.urlprefix + urlsubfix;
var response = Request.CreateResponse(HttpStatusCode.Moved);
response.Headers.Location = new Uri(urlToReturn);
return response;
}
答案 1 :(得分:2)
这是一种可能适合您的替代方式。这就是我使用的技术。
public HttpResponseMessage GetCustomerBarCodeLogo(String ID)
{
Barcode BC = new Barcode();
Image img =BC.Encode(TYPE.CODE128, "123456789");
var dataStream = new MemoryStream();
img.Save(dataStream, ImageFormat.Png);
dataStream.Position = 0;
var result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(dataStream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
return result;
}
答案 2 :(得分:0)
您可以使用FileResult例如
public FileResult GetLogo(string imageName)
{
return File(Server.MapPath("~/App_Data/Images/") + imageName, "image");
}
在这种情况下,File函数获取文件路径和内容类型并返回文件响应。