C # – Cargando imagen remota y enviando al navegador usando un archivo .ashx

Estoy tratando de cargar una imagen remota desde mi depósito de Amazon S3 y enviarla al navegador en binario. También estoy tratando de aprender ASP.Net al mismo tiempo. He sido un progtwigdor clásico durante muchos años y necesito cambiar. Comencé ayer y hoy tengo mi primer dolor de cabeza.

En una página de mi aplicación tengo este elemento de imagen:

 

y en loadImage.ashx, tengo este código exacto:

 -------------------------------------------------  string url = "https://............10000.JPG"; byte[] imageData; using (WebClient client = new WebClient()) { imageData = client.DownloadData(url); } public void ProcessRequest(HttpContext context) { context.Response.OutputStream.Write(imageData, 0, imageData.Length); } ------------------------------------------------- 

Probablemente haya muchos errores con esto, ya que es mi primer bash de .net y no sé lo que estoy haciendo. Para empezar, recibo el siguiente error, pero seguro que hay más por venir.

 CS0116: A namespace does not directly contain members such as fields or methods 

Esto está en la línea 3, que es la string url = "https://............"

Para un HttpHandler, tiene que poner el código en el código detrás … si expande loadimage.ashx en el Explorador de soluciones, debería ver un archivo loadimage.ashx.cs. Este archivo es donde debe estar su lógica y todo debe estar en el método ProcessRequest.

Entonces loadimage.ashx debería estar básicamente vacío:

 <%@ WebHandler Language="C#" Class="loadimage" %> 

Y loadimage.ashx.cs debe contener el rest:

 using System.Web; public class loadimage : IHttpHandler { public void ProcessRequest(HttpContext context) { string url = "https://............10000.JPG"; byte[] imageData; using (WebClient client = new WebClient()) { imageData = client.DownloadData(url); } context.Response.OutputStream.Write(imageData, 0, imageData.Length); } public bool IsReusable { get { return false; } } } 

Alternativamente, puede crear una página aspx que sirva la imagen. Esto elimina el requisito de código subyacente, pero agrega un poco más de sobrecarga … cree una página loadimage.aspx con lo siguiente:

 <%@ Page Language="C#" AutoEventWireup="true" %>  

Luego haga referencia a este loadimage.aspx en la imagen src en lugar de ashx.