В современных 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 говорит серверу, нужно ли инстанцировать класс для каждого запроса, это не кэш, так что в большинстве случаев, метод будет возвращать true.
Теперь, сервер не будет выполнять лишних действий по созданию «тяжелого» класса Page с большим количеством бесполезных на данный момент событий, и в итоге мы получим именно то, что нам надо.
Метки:ASP.NET, C#, разработка
Похожие статьи
- 27 августа 2008 -- Кеширование ASP.NET страниц браузером. (2)
- 6 февраля 2009 -- Загрузка Flash в Windows.Forms и WPF. (2)
- 22 августа 2008 -- Собственная страница для обработки ошибок на ASP.NET (0)
- 15 октября 2008 -- Метод SaveOrUpdate для Linq to SQL. (3)
- 30 июля 2010 -- DLR 1.0 на примере IronPython 2.6 (0)
1 февраля, 2010 at 9:01
Спасибо! Написано очень толково и со знанием дела!