2013-09-24 26 views
4

我目前正在從所有相同文件類型的數據庫表中提供圖像。我想要字符點「。」在路線上,但沒有成功這樣做。我的理解是,ISAPI處理程序可能導致與此相關的問題。我只是不確定我將如何去添加和排除,以允許ASP.NET處理此路由。使用點「。」 MVC4路由中的字符

routes.MapRoute(
    name: "ImageUrl", 
    url: "Image/{action}/{id}.png", 
    defaults: new { controller = "Image" } 
); 
+0

什麼IIS版本? –

+0

我認爲'/ image/find/2.png'可能會給你'Resource not found'例外 –

+0

我使用的Azure網站導致我相信它是8.0或8.5。 @Murali我試圖解決的確切問題是由於ISAPI導致的404錯誤。 –

回答

2

你得到404錯誤,因爲在IIS配置映射到路徑*.png沒有具體的管理處理器。因此,對Image/*.png路徑的所有請求都被StaticFile模塊(StaticFileModule, DefaultDocumentModule, DirectoryListingModule)攔截,並且這些模塊無法找到請求的文件。

您可以通過在web.config中配置您的應用程序來解決此問題。

第一個選項是將runAllManagedModulesForAllRequests="true"屬性添加到configuration/system.webServer/modules元素。應該這樣看:

<modules runAllManagedModulesForAllRequests="true" /> 

注:但我會強烈建議不這樣做。閱讀更多關於possible performance problems

所以第二(和更好的)選項是註冊ASP.NET ISAPI處理您的請求Image/*.png路徑:

<system.webServer> 
    <handlers> 
    <add name="ImageMVCHandler-ISAPI-4.0_32bit" path="image/*.png" verb="GET,HEAD" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
    <add name="ImageMVCHandler-ISAPI-4.0_64bit" path="image/*.png" verb="GET,HEAD" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
    <add name="ImageMVCHandler-Integrated-4.0" path="image/*.png" verb="GET,HEAD" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
</system.webServer> 
+0

謝謝第二個選項正是我期待的例子,因爲我沒有任何關於處理程序配置的經驗。 –