Monday, January 10, 2011

Ускоритель для IE или GenericHandler.ashx своми руками

На моем сайте есть лента анекдотов (на главной странице), так вот, чтобы добавить на ленту новую запись надо зайти на сайт, нажать кнопку, которая откроет форму добавления, запонить поля, выбрать параметры и нажать кнопку "добавить". Это долго и не всегда хочется тратить на это время. Хочу чтобы было просто: нашел что-то интересное и смешное на каком-нибудь сайте, выделил, нажал на ускоритель и всё уже на сайте. Итак...

Для начала потребуется создать обработчик запросов (я выбрал название LentaIE.ashx), который будет получать данные от ускорителя. А потом создать специальный xml-файл, который должен соответствовать спецификации. Описание спецификации достаточно подробно описано MSDN, поэтому я не буду этого делать, а просто приведу готовый код:

<?xml version="1.0" encoding="UTF-8"?>
<os:openServiceDescription
   xmlns:os="http://www.microsoft.com/schemas/openservicedescription/1.0">
   <os:homepageUrl>http://www.calabonga.com</os:homepageUrl>
   <os:display>
       <os:name>Поделиться анекдотом</os:name>
       <os:icon>http://www.calabonga.com/images/musorka.ico</os:icon>
       <os:description>Мусорка - рассказать разместить свой анекдот</os:description>
   </os:display>
   <os:activity category="Share">
       <os:activityAction context="selection">
           <os:execute action="http://www.calabonga.com/h/LentaIE.ashx?content={selection}" method="post">
               <os:parameter name="content" value="{selection}" type="text" />
           </os:execute>
       </os:activityAction>
   </os:activity>
</os:openServiceDescription>

Теперь что касается обработчика (.ashx). Создадим новый при помощи шаблона Visual Studio. Вновь созданный файл имеет следующий вид:

   public class LentaIE : IHttpHandler
   {
       public void ProcessRequest(HttpContext context)
       {
       }
       public bool IsReusable
       {
           get
           {
               return false;
           }
       }
   }

А теперь давайте напичкаем этот класс полезностями. Во-первых, создадим поле которое будет экземпляром класса унаследованного от DataContext (LINQ to SQL).

Read more: Мусорка - найди лучшее!