ASP.NET MVC 阻止通过URL访问服务器上的静态资源文件

背景 

在默认情况下,MVC框架是支持对服务器静态资源的访问的,我们在项目根目录下新建一个Content文件夹,然后添加一个命名为“StaticContent.html”的html文件,如下图所示:

                                         

 StaticContent.html中的代码如下图所示:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title><meta charset="utf-8" />
</head>
<body>This is the static html file(~/Content/StaticContent.html)
</body>
</html>

运行项目,输入URL,可以看到能访问到这个文件: 

                          

 


为磁盘文件定义路由 

为了安全考虑,希望用户不能访问某些文件夹,我们可以增加如下代码:

        public static void RegisterRoutes(RouteCollection routes){routes.RouteExistingFiles = true;}

这段代码告诉MVC框架,对于静态文件我们也要走路由机制(默认情况下,MVC框架发现请求的文件存在于服务器上时,会绕过路由机制,直接读取文件) 

然后新建一条更具体的静态路由,映射文件路径请求,如下图所示:

public static void RegisterRoutes(RouteCollection routes)
{routes.RouteExistingFiles = true;routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.MapMvcAttributeRoutes();//映射到Customer控制器上的List方法routes.MapRoute("DiskFile","Content/StaticContent.html",new { controller = "Customer",action = "List"});routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}

再次运行项目, 还是能访问到,如下图所示:

                    


配置应用程序服务器 

以上这么做还不够,需要配置应用程序服务器。首先启动MVC项目,在右下角找到 IIS Express,如下图所示:

                                                                    

右键点击, 选择“显示所有应用程序”后,如下图所示:

                                         

单击网站名称后,在出现的配置一栏中,再次点击配置,如下图所示:

                                            

在打开的文件中,搜索“UrlRoutingModule-4.0” 关键字,如下图所示:

将preCondition属性设置为空字符串,如下图所示: 

<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />

在VS中重新运行项目,让修改后的配置生效,并导航到/content/StaticContent.html,可以看到映射已经生效: 

                    

当然,可以自己修改Customer控制器下List方法返回的页面代码,增加个提示,比如“无法访问资源文件”什么的。 


注意IIS 和 IIS Express的处理方式是有区别的,如果你的程序发布到IIS上,需要在web.config中添加如下代码,否则静态文件还是会交由IIS处理,而不会被路由。如下图所示:

<configuration><system.webServer><modules runAllManagedModulesForAllRequests="true" />.......</system.webServer>
</configuration>

 


绕过路由系统 

到这里还没结束,以上方法禁止了对所有资源文件的访问。如果现在去请求scripts文件夹下的静态js文件,能看到如下图所示:

           

如果希望排除某些资源文件 ,绕过路由系统,可以用以下代码:

public class RouteConfig{public static void RegisterRoutes(RouteCollection routes){routes.RouteExistingFiles = true;routes.IgnoreRoute("Scripts/{*pathInfo}");}}

 在这种情况下,URL模式将匹配任何两个片段的URL,第一个片段是“Scripts”,第二个片段{*pathInfo}是所有路径的意思。

IgnoreRoute方法在RouteCollection中创建了一个条目,在RouteCollection中路由处理程序是StopRoutingHandler类的一个实例,而不是MvcRouteHandler类。路由系统被硬编码以识别这个处理程序。如果传递给IgnoreRoute方法的URL模式匹配,那么后面的路由将不会被计算,就像匹配一个普通的路由一样。

再次访问JS文件,成功,如下图所示: 

 


本文结束 ,部分参考来自这篇文章

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怀念一下过去的人和事

年轻的时候&#xff0c;有大把的时间可以胡折腾。现在这人已经成了过去了&#xff0c;只生存在另一个平行空间了&#xff0c;也许在另外的空间里&#xff0c;另一个我还每天弹着重金属&#xff0c;喝酒吃肉。昔人已抱吉他去&#xff0c;此地空余效果器。现在廉颇老矣&#xff0…

linux 调优 网络调优

1 UDP buffer size sysctl -a 接收 net.core.rmem_default (默认)net.core.rmem_max (最大)发送 net.core.wmem_default (默认)net.core.wmem_default &#xff08;最大&#xff09;2 TCPbuffer sizesysctl -a net.ipv4.tcp_mem 最小 合理 最大&…

精通ASP.NET MVC——控制器和动作

在MVC框架中&#xff0c;控制器必须实现System.Web.Mvc命名空间的IController接口&#xff0c;如下图所示&#xff1a; //// 摘要:// 定义控制器所需的方法。public interface IController{//// 摘要:// 执行指定的请求上下文。//// 参数:// requestContext:// 请…

精通ASP.NET MVC ——视图

文章非常长&#xff0c;仅仅用于记录自己学习。 创建自定义视图引擎 创建自定义视图引擎的价值是&#xff0c;演示请求处理管道如何工作&#xff0c;并完善关于MVC架构如何操作的知识&#xff0c;视图引擎实现IViewEngine接口&#xff0c;如下图所示&#xff1a; public inte…

使用列表选择框控件

本例使用列表选择框控件,并向其中添加删除列表项&#xff0c;程序运行如下图所示。 程序代码如下。 using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace eg38_checklistBoxApp {public partial class Form1 : Form…

精通ASP.NET MVC ——辅助器方法

辅助器方法(Helper Method)&#xff0c;其作用是对代码块和标记进行打包&#xff0c;以便能够在整个MVC框架应用程序中重用。 首先新建一个项目&#xff0c;添加一个Home控制器&#xff0c;如下图所示&#xff1a; public class HomeController : Controller{// GET: Homepubli…

用css3制作旋转加载动画的几种方法

以WebKit为核心的浏览器&#xff0c;例如Safari和Chrome&#xff0c;对html5有着很好的支持&#xff0c;在移动平台中这两个浏览器对应的就是IOS和Android。最近在开发一个移动平台的web app&#xff0c;那么就有机会利用css3去实现一些很酷的效果&#xff0c;这些效果原来更多…

精通ASP.NET MVC ——模型绑定

模型绑定&#xff08;Model Binding&#xff09;是指&#xff0c;用浏览器以Http请求方式发送的数据来创建.Net对象的过程。 准备示例项目 新建一个空的MVC项目&#xff0c;名叫MvcModels&#xff0c;接下去会以此项目来演示各种功能。 在Models文件夹中创建一个Person.cs类…

C# 数据库连接池 线程安全 单例模式 的实现

本文介绍3种线程安全模式 1&#xff0c;lock 2&#xff0c;Mutex 3&#xff0c;MethodImpl 以前写的一个MYSQL数据库连接池ConnectionPool.CS using System; using System.Collections.Generic; using System.Linq; using System.Text;using System.IO; using System.Threading…

精通ASP.NET MVC ——模型验证

文章内容较长&#xff0c;用于记录自己学习。模型验证&#xff08;Model Vaildation&#xff09;是确保应用程序所接受的数据适合于绑定到模型&#xff0c;并且在不合适时给用户提供有用的信息&#xff0c;以帮助他们修正问题的过程。 准备示例项目 新建一个空的MVC项目&…

[wbia 2.2] 对检索结果进行评估

评估对检索系统的性能&#xff1a; 由于我们这里的检索结果&#xff0c;是主要根据PageRank的排名&#xff0c;以及Lucene对文本的分词和相关性计算的最后得分&#xff0c;进行权值调整后得到的排名结果。 这里对我们检索系统的进行性能评估&#xff0c;这里主要评估的是检索结…

错误175:具有固定名称MySql.Data.MySqlClient的ADO.NET提供程序未在计算机或者应用程序配置文件中注册或者无法加载

背景&#xff1a; EF连接MySQL时报错&#xff0c;截图如下图所示&#xff1a; 网上翻阅了很多资料&#xff0c;感觉有一篇文章说的比较靠谱&#xff1a;点击阅读。解决问题的大致过程如下&#xff1a; 在尝试使用MySQL&#xff0c;ADO.NET&#xff08;数据库优先&#xff09;和…

防止刷票方法大全

1. IP限制 这是使用的最多&#xff0c;也是最广泛&#xff0c;不可少的刷票限制。而且由于专题都没有用户模块&#xff0c;使得这个方法&#xff0c;几乎成了唯一可行的手段。该方式&#xff0c;通过获取访问游客的IP地址&#xff0c;来限制其在一段时间内所能使用的票数。当然…

精通ASP.NET MVC ——URL和Ajax辅助器方法

Ajax(或者&#xff0c;如果你愿意&#xff0c;也可以称为AJAX)是 Asynchronous JavaScripts and XML(异步JavaScripts与XML)。其XML部分并不如它往常那样意义重大&#xff0c;但是异步部分却使AJax十分有用。这是后台请求服务器数据&#xff0c;而不必重载Web页面的一种模型。M…

九把巨剑,为什么会从天而降?

在那记忆的残片之中&#xff0c;他看到了九把巨剑从天而降的壮阔画面&#xff0c;还听到了长袍剑客对自己的嘱托。 九把巨剑&#xff0c;为什么会从天而降&#xff1f;这当中&#xff0c;究竟有何寓意&#xff1f; 那个长袍剑客&#xff0c;究竟又是什么人&#xff1f; 没有答案…

精通ASP.NET MVC ——控制器可扩展性

MVC中引导动作方法执行过程的请求流程管道中&#xff0c;有两个重要的部件&#xff1a;控制器工厂(Controller Factory) 和 动作调用器&#xff08;Action Invoker&#xff09;。控制器工厂负责创建对请求进行服务的控制器实例&#xff0c;动作调用器负责查找并调用控制器类中的…

永中向香港博览会主办方演示云办公(转载)

4月16号“香港国际资讯博览会”主办方香港贸发局对永中云办公产品非常感兴趣&#xff0c;由永中员工演示&#xff0c;并拍摄了演示视频。转载于:https://blog.51cto.com/premium/837675

Backbone.js学习笔记

为什么80%的码农都做不了架构师&#xff1f;>>> http://documentcloud.github.com/backbone var todoItem new TodoItem(); todoItem.url /todo; todoItem.fetch(); todoItem.get(description)var TodoItem Backbone.Model.extend({urlRoot: /todos }); var tod…

ASP.NET MVC中使用Autofac实现简单依赖注入

本文参考资料&#xff1a; 1、https://www.cnblogs.com/RayWang/p/11128554.html。 2、https://www.cnblogs.com/eedc/p/6127181.html 3、https://www.cnblogs.com/ancupofcoffee/p/5007649.html#top 前言 关于IoC和DI(依赖注入)的概念网上一搜一大把。简单来说&#xff0c;Io…

初探EntityFramework——来自数据库的EF设计器

本文通过简单的示例&#xff0c;先初步了解下EF四种设计模式之一&#xff1a;来自数据库的EF设计器。 来自数据库的EF设计器&#xff0c;顾名思义&#xff0c;需要有新建的数据库和表结构&#xff0c;才能生成EF设计器&#xff0c; 在本地新建数据库KTStore&#xff0c;并且新建…