2011-02-07 10 views
0

すべてのsitemap.xmlリクエストをカスタムリクエストハンドラに転送するルートを追加しようとしています。transfer sitemap.xml ASP.NET MVCのハンドラへのHTTPリクエスト

私は、次のコードを使用してみました:

 routes.Add(new Route("sitemap.xml", new Helpers.SiteMapRouteHandler())); 
     routes.MapRoute(
      "Default",            
      "{controller}/{action}/{id}",       
      new { controller = "Home", action = "Index", id = "" } 
     ); 

をしかし、私はUrl.Action()を使用してリンクさせるとき:

Url.Action("Index", new { controller = "About"}) 

を私はXMLファイルに移動しようとすると、私は、次を得る:

/sitemap.xml?action=Index&controller=About 

私は間違っていますか?

ANSWER:私はこれで問題が解決するかどうかわからないんだけど、それは試してみる価値はあります

Specifying exact path for my ASP.NET Http Handler

+0

?それはかなり一般的なように見えるので、すべての要求で一致します。あなたはPhil HaackのRoute Debuggerを使って手助けをすることができます。 –

答えて

0

私は、このソリューションを使用

routes.Add(
    new Route(
     "{request}", 
     new RouteValueDictionary(new { id = "" }), // this might be the tricky part to change 
     new RouteValueDictionary(new { request = "sitemap.xml" }), 
     new Helpers.SiteMapRouteHandler() 
    )); 
+0

いいえ、動作しません。 /sitemap.xmlを取得しようとするとHTTP 404が出る – Shay

+0

私はもっと助けてくれたかもしれない。私が考えることができるのは、両方ともRVD(new {request = "sitemap.xml"})を設定しようとすることだけです。 – ARM

3

あなたが代わりに要求ハンドラ

へのへのルートと行動したい場合は、ここで述べたようにあなたがこの

routes.MapRoute(
     "Sitemap", 
     "sitemap.xml", 
     new { controller = "Home", action = "SiteMap" } 
     ); 

のようなルートを追加することができます - MVC: How to route /sitemap.xml to an ActionResult?、それは私のために働いた

更新:また、<modules runAllManagedModulesForAllRequests="true">が設定されていることを確認してください。

+0

素晴らしい作品です! –

0

web.configファイルにハンドラを追加する必要があります。

<add name="SitemapFileHandler" path="sitemap.xml" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/> 

そして、あなたのルートを設定:

routes.RouteExistingFiles = true; 

もっとここで読む:あなたがルートのリストにそれを持っているん http://weblogs.asp.net/jongalloway//asp-net-mvc-routing-intercepting-file-requests-like-index-html-and-what-it-teaches-about-how-routing-works

関連する問題