Используйте маршрутизацию в HTTPHandler - PullRequest
1 голос
/ 17 августа 2010

Я хочу использовать HTTP-обработчик для создания RSS-каналов.

Для этой цели я хочу поместить свою логику для создания XML-класса rss в классе C #, который реализует IHttpHandler, затем «отобразить» этот обработчик в файл web.config и зарегистрировать «сопоставленное имя» в моей маршрутизации. правила. Я делаю что-то вроде этого:

Мой HTTPHanlder:

public class RSSFeedHandler:IHttpHandler  
{   
    public void ProcessRequest( HttpContext context )  
    {   
        //logic for building the XML   
        context.Response.ContentType = "text/xml";   
        context.Response.Write( XMLContent);   
        .....................................  

Мой Web.Config:

<httpHandlers>
  <add path="Rss" verb="*" type="RSSFeedHandler" validate="false" />
.......   
<handlers> 
  <add name="RSSFeedHandler" path="Rss" verb="*" type="RSSFeedHandler" />
   ........  

Мой указатель маршрутизации в global.asax:

RoutingHandler rssHandler = new RoutingHandler( "~/rss" );   
 .........   
 routes.Add( new Route( "rss/{type}/{id}", rssHandler ) );  

Мой Маршрутный Hanlder:

public class RoutingHandler : IRouteHandler    
{  
    ............................   
    public IHttpHandler GetHttpHandler( RequestContext requestContext )   
    {   

Итак, я хочу, чтобы в адресной строке пользователь вводил что-то вроде: www.mysite.com/rss/news/25, например, сервер, чтобы выполнить логику из обработчика HTTP и показать RSS-канал для типа «новости» с идентификатором «25». (эти параметры маршрутизации должны быть проанализированы в моем RSS HTTPHanlder)

Проблема в том, что при вызове URL-адреса, аналогичного указанному выше, в методе GetHttpHandler возникает ОШИБКА, которая говорит: «Файл '/ Rss' не существует».

Я думаю, это потому, что этот метод был вызван перед «отображением» в web.config, но я не уверен.

Знаете ли вы, как мне достичь желаемой функциональности?

1 Ответ

2 голосов
/ 19 августа 2010

Я решил свою проблему.

Все, что мне нужно, это вернуть RSSFeedHandler в методе GetHttpHandler вместо страницы.

Для получения дополнительной информации о решении вы можете просмотреть http://forums.asp.net/p/1533299/3717070.aspx.

...