2011-03-09 86 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