Apa cara terbaik untuk mengembalikan gambar dengan 2 parameter (x dan y untuk mengubah ukuran).
Sebagai contoh
~/api/image12345/200/200
Akan mengembalikan 200 x 200 jpg / png / atau gif
Haruskah saya mengembalikan System.Drawing.Image
objek atau secara manual mendefinisikan HTTPReponseMessage.Content
?
asp.net
asp.net-web-api
image
Max Alexander
sumber
sumber
Jawaban:
Anda tidak boleh mengembalikan a
System.Drawing.Image
, kecuali jika Anda juga menambahkan pemformat yang tahu cara mengubahnya menjadi byte yang sesuai tidak membuat serial sendiri sebagai byte gambar seperti yang Anda harapkan.Salah satu solusi yang mungkin adalah mengembalikan
HttpResponseMessage
dengan gambar yang disimpan dalam isinya (seperti yang ditunjukkan di bawah). Ingatlah bahwa jika Anda menginginkan URL yang Anda tampilkan dalam pertanyaan, Anda memerlukan rute yang memetakan parameter {imageName}, {width} dan {height}.public HttpResponseMessage Get(string imageName, int width, int height) { Image img = GetImage(imageName, width, height); using(MemoryStream ms = new MemoryStream()) { img.Save(ms, System.Drawing.Imaging.ImageFormat.Png); HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new ByteArrayContent(ms.ToArray()); result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png"); return result; } }
Tetapi sekali lagi, jika Anda melakukan ini di banyak tempat, menggunakan rute formatter mungkin merupakan cara yang "disarankan". Karena hampir semua hal dalam pemrograman, jawabannya akan tergantung pada skenario Anda.
sumber
GetImage
metodenya?Gambar itu berat. ASP.NET WebForms, HttpHandlers, MVC, dan Web API semuanya melakukan pekerjaan yang sangat buruk dalam melayani file statis. IIS melakukan pekerjaan yang sangat baik - Seringkali 20-100x lebih efisien.
Jika Anda ingin mendapatkan performa yang baik, lakukan penulisan ulang URL paling lambat selama PostAuthorizeRequest, sehingga IIS dapat mengambil dan menyajikan file. Ya, ini berarti penanganan kejadian tingkat HttpModule.
[Penafian: Saya penulis artikel dan proyek sumber terbuka berikut]
Jika Anda melakukan sesuatu yang dinamis dengan gambar, lihat artikel ini tentang kesalahan pemrosesan gambar yang harus dihindari , dan pertimbangkan untuk melihat ImageResizer . Ini memiliki cache disk yang sangat baik (yang menggunakan penanganan file statis IIS), dan mudah untuk terhubung ke pembuatan gambar apa pun. Ini memiliki binding opsional untuk AForge, FreeImage, dan WIC juga, jika Anda perlu mahir.
sumber