2011-02-23 128 views
4

我在路徑/Files/filename.txt中的磁盤上有一個文件,MVC路由系統在使用其路由邏輯(與控制器,動作...)之前檢查文件是否存在。ASP.NET MVC路由:如何使用路由匹配單個文件夾的文件?

我想在匹配磁盤上的文件之前使用路由邏輯。

如果我設置「RouteExistingFiles = true」,它將總是使用路由匹配文件。我只想爲特定文件夾的這種行爲。

即使Files文件夾中的文件存在,也必須調用「FilesController」。基本上我想要「IgnoreRoute()」的相反行爲。

我該如何做到這一點?

回答

0

你將不得不採取兩個部分的方法來做到這一點。

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 

<location path="files"> 
    <system.web> 
      <authorization> 
       <deny users="*"/> 
      </authorization> 
    </system.web> 
</location> 
  1. 確保你在你的web.config runAllManagedModulesForAllRequests是真的爲了使UrlAuthorizationModule爲靜態文件運行。
  2. 您將需要特別停止asp.net提供名爲files的文件夾中的文件。您可以通過將位置條目添加到配置節點內的web.config中來完成此操作。這是特別告訴授權模塊,無論用戶是誰,他們都無法訪問此文件夾。

完成此操作後,您的FilesController現在將負責爲文件夾提供文件。