ASP.NET MVC RouteExistingFiles问题 [英] ASP.NET MVC RouteExistingFiles question

查看:137
本文介绍了ASP.NET MVC RouteExistingFiles问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

看来,ASP.NET MVC 3将首先寻找路由表前,为现有的文件。这可以通过设置选项 routes.RouteExistingFiles = TRUE 关闭。当它被设置为不航线现有的文件,它似乎并不服务于全部文件。例如,如果一个文件名为* .CS将无法送达。如果文件被重命名为.txt会送达。我觉得这是相当武断的,我一直没能找到什么供应,什么是不提供任何文件。这本来是更好的静态文件服务添加在路由表中的条目,有StaticFileRouteHandler类或东西沿着这些路线。有没有人有关于这个主题的更多信息或细节?我想有过一下我的应用程序服务或不完全控制。

P.S:我使用的是ASP.NET开发服务器


解决方案

  

例如,如果一个文件名为*的.cs它不会被送达


您可以看看在<&HttpHandlers的GT; 部分的 C:\\ WINDOWS \\ Microsoft.NET \\框架\\ v4.0.30319 \\ CONFIG \\ web.config中文件。我的是这样的:

 <&HttpHandlers的GT;
    <添加路径=eurl.axd动词=*TYPE =System.Web.HttpNotFoundHandler验证=真/>
    <添加路径=的trace.axd动词=*TYPE =System.Web.Handlers.TraceHandler验证=真/>
    <添加路径=WebResource.axd的动词=GETTYPE =System.Web.Handlers.AssemblyResourceLoader验证=真/>
    <添加动词=*路径=* _ AppService.axdTYPE =System.Web.Script.Services.ScriptHandlerFactory,System.Web.Extensions程序,版本= 4.0.0.0,文化=中性公钥= 31bf3856ad364e35验证=FALSE/>
    <添加动词=GET,HEAD路径=的ScriptResource.axdTYPE =System.Web.Handlers.ScriptResourceHandler,System.Web.Extensions程序,版本= 4.0.0.0,文化=中性公钥= 31bf3856ad364e35验证= 假/>
    <添加路径=* AXD。动词=*TYPE =System.Web.HttpNotFoundHandler验证=真/>
    <添加路径=* ASPX。动词=*TYPE =System.Web.UI.PageHandlerFactory验证=真/>
    <添加路径=* ashx的。动词=*TYPE =System.Web.UI.SimpleHandlerFactory验证=真/>
    <添加路径=*。ASMX动词=*TYPE =System.Web.Script.Services.ScriptHandlerFactory,System.Web.Extensions程序,版本= 4.0.0.0,文化=中性公钥= 31bf3856ad364e35验证= 假/>
    <* REM添加路径=动词=*TYPE =System.Runtime.Remoting.Channels.Http.Htt premotingHandlerFactory,System.Runtime.Remoting,版本= 4.0.0.0,文化=中立,公钥= b77a5c561934e089验证=FALSE/>
    <添加路径=*肥皂动词=*TYPE =System.Runtime.Remoting.Channels.Http.Htt premotingHandlerFactory,System.Runtime.Remoting,版本= 4.0.0.0,文化=中立,公钥= b77a5c561934e089验证=FALSE/>
    <添加路径=* ASAX。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* ASCX。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=*师傅。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=*皮肤。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=*浏览器。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=*地图。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* dll.config。动词=GET,HEADTYPE =System.Web.StaticFileHandler验证=真/>
    <添加路径=* exe.config。动词=GET,HEADTYPE =System.Web.StaticFileHandler验证=真/>
    <添加路径=*配置。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* CS。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=*的csproj。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* VB动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* vbproj动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* webinfo。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* licx。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* RESX。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=*资源。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* MDB。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* vjsproj动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* java的。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* JSL。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=*六味地黄丸。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=*广告。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* DD。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* LDD。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* SD。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* CD。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* adprototype。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* lddprototype。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* SDM。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* sdmDocument。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=*中密度纤维板。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* LDF。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=*排除。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=*刷新。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* SVC动词=*TYPE =System.ServiceModel.Activati​​on.HttpHandler,System.ServiceModel.Activati​​on,版本= 4.0.0.0,文化=中性公钥= 31bf3856ad364e35验证=假/>
    <添加路径=*规则。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* XOML。动词=*TYPE =System.ServiceModel.Activati​​on.HttpHandler,System.ServiceModel.Activati​​on,版本= 4.0.0.0,文化=中性公钥= 31bf3856ad364e35验证=假/>
    <添加路径=* xamlx动词=*TYPE =System.Xaml.Hosting.XamlHttpHandlerFactory,System.Xaml.Hosting,版本= 4.0.0.0,文化=中性公钥= 31bf3856ad364e35验证=假/>
    <添加路径=* aspq。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* cshtm。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* CSHTML。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* vbhtm。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=* vbhtml。动词=*TYPE =System.Web.HttpForbiddenHandler验证=真/>
    <添加路径=*动词=GET,HEAD,POSTTYPE =System.Web.DefaultHttpHandler验证=真/>
    <添加路径=*动词=*TYPE =System.Web.HttpMethodNotAllowedHandler验证=真/>
与LT; / HttpHandlers的>

所以,你可以看到所有这些禁止的扩展。它们对应于源$ C ​​$ C文件,并出于安全考虑不直接提供。否则,人们将能够看到你的源$ C ​​$ C文件。

如果你想为他们服务,你可以写一个控制器的动作这将成为这些文件。

It seems that ASP.NET MVC 3 will serve existing files first before looking at the routing table. This can be turned off by setting the option routes.RouteExistingFiles = true. When it is set to not route existing files, it doesn't seem to serve all files. For example if a file is named *.cs it will not be served. If the file is renamed to .txt it will be served. I find this rather arbitrary and I haven't been able to find any documentation about what is served and what is not served. It should have been much better that static file serving was added as an entry in the routing table, with a StaticFileRouteHandler class or something along these lines. Does anyone have more information or details about this subject? I would like to have full control over what my application is serving or not.

P.S: I am using the ASP.NET development server.

解决方案

For example if a file is named *.cs it will not be served

You may take a look at the <httpHandlers> section of your c:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config file. Mine looks like this:

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

So you can see all those forbidden extensions. They correspond to source code files and for security reasons are not served directly. Otherwise people would be able to look at your source code file.

If you wanted to serve them you could write a controller action which would serve those files.

这篇关于ASP.NET MVC RouteExistingFiles问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆