2011-03-09 116 views
1

在查看路由表之前,似乎ASP.NET MVC 3將首先提供現有文件。這可以通過設置選項routes.RouteExistingFiles = true來關閉。當它被設置爲不路由現有文件時,它似乎並不服務於全部文件。例如,如果一個文件被命名爲* .cs,它將不會被提供。如果文件重命名爲.txt,它將被提供。我覺得這很隨意,我一直沒有找到任何有關什麼服務和什麼不服務的文件。在路由表中添加靜態文件服務作爲條目應該是更好的了,具有StaticFileRouteHandler類或沿着這些線的東西。有沒有人有關於此主題的更多信息或詳細信息?我想完全控制我的應用程序的服務與否。ASP.NET MVC RouteExistingFiles問題

P.S:我正在使用ASP.NET開發服務器。

回答

3

例如,如果一個文件名爲*的.cs它不會被送達

你可以看看你的c:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config文件的<httpHandlers>部分。我看起來像這樣:

<httpHandlers> 
    <add path="eurl.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" /> 
    <add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" /> 
    <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" /> 
    <add verb="*" path="*_AppService.axd" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False" /> 
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/> 
    <add path="*.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" /> 
    <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True" /> 
    <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" /> 
    <add path="*.asmx" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False" /> 
    <add path="*.rem" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="False" /> 
    <add path="*.soap" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="False" /> 
    <add path="*.asax" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.ascx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.master" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.skin" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.browser" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.sitemap" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.dll.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="True" /> 
    <add path="*.exe.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="True" /> 
    <add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.csproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.vb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.vbproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.webinfo" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.licx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.resx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.resources" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.mdb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.vjsproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.java" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.jsl" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.ldb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.ad" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.dd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.ldd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.sd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.cd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.adprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.lddprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.sdm" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.sdmDocument" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.mdf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.ldf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.exclude" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.refresh" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> 
    <add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/> 
    <add path="*.rules" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/> 
    <add path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/> 
    <add path="*.xamlx" verb="*" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/> 
    <add path="*.aspq" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/> 
    <add path="*.cshtm" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/> 
    <add path="*.cshtml" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/> 
    <add path="*.vbhtm" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/> 
    <add path="*.vbhtml" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/> 
    <add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="True" /> 
    <add path="*" verb="*" type="System.Web.HttpMethodNotAllowedHandler" validate="True" /> 
</httpHandlers> 

所以你可以看到所有那些禁止的擴展。它們對應於源代碼文件,出於安全原因不直接提供。否則,人們將能夠查看您的源代碼文件。

如果你想爲他們服務,你可以編寫一個控制器動作來處理這些文件。

+0

未檢查該文件。這解釋了這個謎。 – 2011-03-09 18:12:04

1

我想說的是,IIS控制着什麼文件被提供,並且取代了MVC路由表項的口述。

如果您想提供.CS文件,您可能需要調整IIS中的MIME類型。

嘗試添加.cs擴展名mime類型並將文件類型設置爲text/cs。

+0

這是正確的。對要提供的文件類型有限制。除非您在IIS中另行指定,否則.cs文件絕對在限制列表中。 – Chev 2011-03-09 18:01:39

+0

在這種情況下,我沒有使用IIS,想知道這是從哪裏拿起來的。事實證明它來自.NET Framework文件夾中的web.config。 – 2011-03-09 18:11:22