2014-01-30 2 views
6

Я ищу создание обработчика для возврата изображений на основе пройденного идентификатора, я не создал свой собственный до и когда я его создал, он упоминает, что он должен быть зарегистрирован в IIS. Этот проект распространяется среди большого количества клиентов, мне придется изменить IIS каждого или есть какой-то путь вокруг этого или альтернативы обработчику?Создайте обработчик ASP.Net, чтобы вернуть изображение как байты

EDIT: В ответ ниже, это то, что я создал (но еще не проверял), так что мне нужно что-то изменить в IIS или web.config для этого?

public class Photos : IHttpHandler 
{ 
    #region IHttpHandler Members 

    public bool IsReusable 
    { 
     get { return true; } 
    } 

    public void ProcessRequest(HttpContext context) 
    { 
     //write your handler implementation here. 
     var img = Image.FromFile(@"C:\Projects\etc\logo.jpg"); 
     context.Response.ContentType = "image/jpeg"; 
     img.Save(context.Response.OutputStream, ImageFormat.Jpeg); 
    } 

    #endregion 
} 
+0

Что у вас есть? –

+0

См. Edit, строит нормально, но не возвращает изображение, несмотря на правильность пути проверки. – user1166905

ответ

8

Вы можете создать класс, который наследует IHttpHandler и в пределах этого грейфера идентификатор (из строки запроса или аналогичный), обработать запрос и возвращает двоичные данные. не должен зарегистрировать его с IIS ...

public class MyHandler : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     //Get Id from somewhere 

     //Get binary data 

     context.Response.ContentType = "application/octet-stream"; 
     context.Response.BinaryWrite(bytes); 
    } 
} 
+1

Должно ли мое редактирование в порядке? – user1166905

+0

Да, это выглядит отлично! –

+0

Прикомандированный, это способ решить эту проблему, а тип возврата 'jpeg' лучше, чем' octet-stream', делает более очевидным для клиентов то, что они получают. –

4

Вы можете добавить общего обработчик к вашему проекту (а .ashx файла). Это даст вам файл с кодой следующим образом (выдержка):

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ContentType = "text/plain"; 
    context.Response.Write("Hello World"); 
} 

Вы можете использовать context, чтобы получить строку запроса или маршрутные параметры, а context.Response свойства, чтобы написать свой образ. Измените возвращаемый тип контента на тип вашего изображения, и вы установите его.

Вы установили бы ваше изображение src в: "Handler1.ashx?id=12345", или вы могли бы добавить красивый URL-адрес, указывающий на обработчик.

Не нужно настраивать IIS для этого.

0

В HttpHandlers зарегистрировано в web.config веб-сайта, если вы распространяете конфигурационный файл с веб-сайта вам не нужно изменять конфигурацию IIS

1

Вы можете посмотреть на этой BlogPost о обработчиках, http://www.dotnetperls.com/ashx, который я думаю, довольно близко к тому, что вы хотите сделать.

Смежные вопросы