2013-03-30 24 views
2

所以這裏是我的RouteConfig是什麼樣子:MVC4 RouteConfig.cs不返回靜態文件的robots.txt

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapRoute("Robots.txt", 
      "robots.txt", 
      new { 
       controller = "Home", 
       action = "Robots", 
       id = "", 
       language = "en", 
       culture = "us" 
      }); 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
      "Default", 
      "{language}/{culture}/{controller}/{action}/{id}", 
      new 
      { 
       controller = "Home", 
       action = "Index", 
       id = "", 
       language = "en", 
       culture = "us" 
      }); 
    } 
} 

現在據我瞭解,該網站應robots.txt的路線,當我去到www。 mysite.com/robots.txt,但事實並非如此。我在服務另一個靜態頁面時也遇到了問題,但我找到了一個解決方法,並且不必爲靜態的.html頁面提供服務。

我已經在MVC3中構建了另一個站點,並且我複製了我在那裏使用的路由配置模式,它們似乎工作正常。任何想法爲什麼這不起作用?

P.S.當我瀏覽www.mysite.com/en/US/Home/Robots時,我看到robots.txt文件很好,所以所有的控制器,動作,&視圖都可以匹配。

謝謝!

回答

6

這可能是因爲IIS認爲它是一個靜態文件,因爲擴展名並沒有將它傳遞到管理管道進行處理。

可以將以下處理程序添加到您的web.config文件的<system.webServer>部分,以便使所有的請求/robots.txt經過託管管道(從而通過的路線,你可能已經安裝):

<system.webServer> 
    <handlers> 
     ... 
     <add name="Robots" path="robots.txt" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
</system.webServer> 

您還可以通過啓用管理模塊爲所有請求,使這項工作,但我不建議你這樣做,因爲所有的請求,現在將通過託管管道可能有額外的開銷:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    ... 
</system.webServer> 
+0

哇噢!謝謝,男人!你已經發現了,我永遠不會得到那個。謝謝! – Ryan