請問大大們一下 我使用ASP.NET MVC<img src="@URL">
透過URL 去contorller 對應GetPic() function
然後去取server圖片然後轉成byte塞回前端 裡面可是我遇到了問題 :
設定了HttpResponseMessage Content.Headers.ContentType
可是我輸出還是一直都是text/html
;
Request Headers 也出現了 Provisional headers are shown
原本在asp Form裡面放在ApiController裡面是正常的移植過來MVC就出現了問題
該如何讓他下載輸出在 我的<img src="@URL">
裡面呢....求大神解救了
public HttpResponseMessage GetPic(string id)
{
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("------URL------");
webRequest.AllowWriteStreamBuffering = true;
webRequest.Timeout = 30000;
byte[] res = null;
using (WebResponse response = webRequest.GetResponse())
{
byte[] buffer = new byte[4096];
using (Stream responseStream = response.GetResponseStream())
{
using (MemoryStream memoryStream = new MemoryStream())
{
int count = 0;
do
{
count = responseStream.Read(buffer, 0, buffer.Length);
memoryStream.Write(buffer, 0, count);
}
while (count != 0);
res = memoryStream.ToArray();
}
}
}
MemoryStream toImages = new MemoryStream(res);
HttpResponseMessage result = new HttpResponseMessage();
result.Content = new ByteArrayContent(toImages.ToArray());
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
result.StatusCode = HttpStatusCode.OK;
return result;
}
07/10 16:10 補充一下 像是蝦皮取得圖片的方法雷同 他一樣是自訂義URL
可是他Request Headers內擁有著很多資訊 而我卻 Provisional headers are shown
卡著。
MVC 也有著自己的 token 需要去解開隱私性嗎 ???
https://stackoverflow.com/questions/12240713/put-content-in-httpresponsemessage-object
試著用 Request.CreateResponse 吧
stackoverflow裡應該有你要的答案
上訴所說的我已經有使用了 (?)
HttpResponseMessage result = new HttpResponseMessage();
result.Content = new ByteArrayContent(toImages.ToArray());
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
result.StatusCode = HttpStatusCode.OK;
return result;
你用的是webRequest.GetResponse()
,他說的是webRequest.CreateResponse()
。
.NET MVC 的動作結果並不支援HttpResponseMessage
這種類型。請參閱:
底下的「了解動作結果」。因為不支援,所以他不會幫你處理,所以不會得到輸出的結果,但是也不會報錯。你把:
using (MemoryStream memoryStream = new MemoryStream())
改成
using(Stream memoryStream = Response.OutputStream)
然後在這之前設定Response.ContentType就可以正確輸出。