背景

在默认情况下,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文件,成功,如下图所示:


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

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

  1. 直接输入地址访问服务器上的静态资源

    买的轻量应用服务器,现在目录: m11为静态资源. 自己tomcat的配置: <Connector port="80" protocol="HTTP/1.1&quo ...

  2. SpringBoot直接URL获取静态资源文件

    SpringBoot直接URL获取静态资源文件 spring boot 直接通过url访问获取内部或者外部静态资源图片 https://blog.csdn.net/ljj_9/article/deta ...

  3. SpringBoot 项目将文件图片资源上传到本地静态资源文件夹下(指定文件夹下)

    1.SpringBoot 项目将文件图片资源上传到本地静态资源文件夹下(指定文件夹下) 最终效果: 前端浏览本地文件,点击上传至本地resources/static/images/imgWall下 2 ...

  4. thinkphp5 url重写后,如何引用静态资源文件?

    在使用thinkphp5时,进行了url重写,这时候加载资源文件时--css.js.image时路径的文件夹名,被莫名其妙的当成了模块名,或者时方法名,结果提示模块不不存在,或者时方法不存在之类的,好 ...

  5. 使用mvc模式读取服务器上的文件,关于C#:如何使用asp.net MVC应用程序从服务器上的网络路径读取...

    我已经在运行.net MVC应用程序的Web服务器上设置了到另一台用于存储上载文件的服务器的网络路径.为了允许通过应用程序将文件上传到网络路径,我修改了IIS中的应用程序池,以便该应用程序有权上传到它 ...

  6. 【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源

    从下载安装开始的所有笔记. 其实 Flask 的示例程序算是 MVC 模式的. Model 是 ORM, V 是 Template, C 是 url route 和 request handler. ...

  7. Springboot配置通过URL访问图片(静态资源)

    一.确保为web项目,创建WebConfig 实现WebMvcConfigurer (推荐)或 继承WebMvcConfigurationSupport 说明: SpringBoot2.0 配置Web ...

  8. 使用java调用fastDFS客户端进行静态资源文件上传

    一.背景 上篇博客我介绍了FastDFS的概念.原理以及安装步骤,这篇文章我们来聊一聊如何在java中使用FastDFSClient进行静态资源的上传. 二.使用步骤 1.开发环境 spring+sp ...

  9. spring mvc学习(43):处理静态资源

    上图·是目录结构,本节是有问同学的,当好好总结 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...

最新文章

  1. vue项目中使用本地的json文件
  2. php ecos,php
  3. git 使用及常用命令
  4. 手动脱Mole Box壳实战总结
  5. MonkeyServer的使用及自动化
  6. 洛谷P1852:跳跳棋(LCA,树形结构)
  7. 退休后工资1700多元的人多吗?
  8. 看到一个RISC-V指令集的评论
  9. 语言学句法分析树形图怎么画_哇,好大一棵树! 如何优雅地画句法树形图 丨语言学午餐...
  10. python 排队论_建模算法(七)——排队论模型
  11. web开发框架_Web开发的十大框架
  12. 在chrome浏览器上下载txt小说的Javascript代码
  13. 【杂记】Windows首页挟持病毒查杀过程记录
  14. 强大的可配置业务化后台管理系统
  15. 如何给开源项目贡献代码
  16. 分享创意个性古风剪影喜迎国庆PPT模板
  17. proc wifi 开启_一步一步教你解锁newifi3(新路由3)并编译刷入最新官方OpenWrt
  18. iOS---GPUImage研究:内置滤镜解析
  19. 前端轮播图,无缝衔接
  20. 毫末智行“AI DAY”即将来临,自动驾驶未来何解?

热门文章

  1. 与专门团队一起持续交付
  2. 2015-03-19 create php alternative for myslq_result in mysqli(PHP)--PDO Tutorial for Mysql Developers
  3. 书店POS机--细化迭代2--测试
  4. Mybatis源码阅读(四):核心接口4.2——Executor(上)
  5. IntelliJ IDEA 2017.2 x64 安装Scala
  6. 华为手机应用鸿蒙os,华为手机内置应用逐渐向鸿蒙 OS 靠拢
  7. html网页 table布局实例,HTML用Table表格对网页布局
  8. 密码学替代技术_替代技术及其类型| 密码学
  9. scala 获取数组中元素_从Scala中的元素列表中获取随机元素
  10. Java LinkedList公共对象pollLast()方法(带示例)