ASP.NET MVC RouteExistingFiles问题

时间:2011-03-09 17:13:13

标签: c# asp.net-mvc-3

在查看路由表之前,ASP.NET MVC 3似乎将首先提供现有文件。可以通过设置选项routes.RouteExistingFiles = true来关闭此功能。当它设置为不路由现有文件时,它似乎不提供所有文件。例如,如果文件名为* .cs,则不会提供。如果文件重命名为.txt,则会将其提供。我觉得这很随意,我找不到任何有关服务内容和服务内容的文档。将静态文件服务作为条目添加到路由表中,使用StaticFileRouteHandler类或这些行中的某些内容应该要好得多。有没有人有关于这个主题的更多信息或细节?我想完全控制我的应用程序服务与否。

P.S:我正在使用ASP.NET开发服务器。

2 个答案:

答案 0 :(得分:3)

  

例如,如果文件名为* .cs,则不会提供

您可以查看<httpHandlers>文件的c:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config部分。我看起来像这样:

<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>

所以你可以看到所有那些被禁止的扩展名。它们对应于源代码文件,出于安全原因不直接提供。否则,人们将能够查看您的源代码文件。

如果您想为他们提供服务,您可以编写一个控制器操作来为这些文件提供服务。

答案 1 :(得分:1)

我想说IIS控制服务的文件,并取代了MVC Route表条目所指示的内容。

如果要提供.CS文件,则可能需要调整IIS中的MIME类型。

尝试添加.cs扩展名mime类型,并将文件类型设为text / cs。