- Хроники. - -
Создаем ASHX хендлер в ASP.NET
Posted By Ikutsin On 30 декабря 2008 @ 10:24 In .NET C#,HTML, AJAX, JS & CSS | Comments Disabled
В современных WEB приложениях часто бывает недостаточно создания HTML страниц, но нужна поддержка, скажем, RSS или JSON.
Распространенным способом можно считать создание ASPX страницы с измененным MIME типом.
public class XMLPage : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
Response.ContentType = "text/xml";
Response.ContentEncoding = Encoding.UTF8;
string sXml = BuildXMLString(); //Создать XML
Response.Write( sXml );
Response.End();
}
}
Такой подход неплохо работает, и ничего особенно плохого в нем нет, однако наш класс унаследован от класса Page, что не совсем правильно и требует несколько больше ресурсов чем нашему обработчику действительно нужно.
Альтернативным методом может быть создание HTTP хендлера, и специальной .ASHX страницы. Хендлер в последствии может быть привязан как обработчик любого другого расширения.
И так, начать стоит с создания самой .ASHX страницы:
<!--WebHandler Language="C#" Class="MyProject.XMLHandler"-->
Этой одной строки будет достаточно. 🙂 Теперь, при запросе страницы, сервер будет знать, что обработчик находится в классе MyProject.XMLHandler. Код класса может быть следующим:
public class XMLHandler : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/xml";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
string sXml = BuildXMLString(); //Создать XML
context.Response.Cache.SetExpires(DateTime.Now.AddSeconds(600));
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Write( sXml );
}
public bool IsReusable
{
get { return true; }
}
}
Наш хэндлер должен реализовать интерфейс IHttpHandler. Согласно спецификации IsReusable [1] говорит серверу, нужно ли инстанцировать класс для каждого запроса, это не кэш, так что в большинстве случаев, метод будет возвращать true.
Теперь, сервер не будет выполнять лишних действий по созданию «тяжелого» класса Page с большим количеством бесполезных на данный момент событий, и в итоге мы получим именно то, что нам надо.
Article printed from Хроники.:
URL to article: /776-sozdaem-ashx-xendler-v-aspnet
URLs in this post:
[1] IsReusable: http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.isreusable.aspx
Click here to print.
Copyright © 2008 Все, что меня окружает. All rights reserved.