求助!关于.Net MVC中伪静态和防盗链设置的一些问题

问题描述

最近公司项目有一个需求是这样的,先说一下,项目用的是纯MongoDB,需求就是用户上传的附件要求在数据库里备份一份,本地静态文件夹中存一份,如果静态文件被人误删,可以通过数据库恢复到本地静态地址。一看到这个需求我就想起了利用防盗链的做法来实现“浏览器输入静态文件地址,后端拦截静态请求,先做判断处理,如果文件被误删,则先恢复后再响应,从而确保静态文件(图片)永远不会丢失“,于是我百度了一下找到了好几种做法,都试了,都不行。先说第一种,自己重写一个IRouteHandler,然后在GetHttpHandler实现中return一个自己重写过的IHttpHandler,在IHttpHandler的实现ProcessRequest中做请求的拦截和需求逻辑处理。写完了在RouteConfig中routes.Add("AttachRoute",newRoute("WebResources/Attach/{mType}/{filename}",newAttachRouteHandler()));结果发现不管用,无论如何都不会命中这个路由,除非把静态地址最后文件名的后缀名从“.”句点符号开始去掉,才可以命中路由。再说第二种,利用ActionFilter+和静态文件夹同名Controller搭配的方法拦截请求做处理,也不行,还是那个问题,无法命中路由。再说第三种,在Global的Application_BeginRequest中做请求的拦截和判断,后来发现,这种方法也是那个问题,如果请求路径中带“.”就进不到这个方法里,应该是被IIS先处理掉了。最后说第4种,也是这种做法最后成功了,但是其中有2个点,我现在都没搞明白到底是什么原理。求解答!我存图片的静态文件夹叫做WebResouce,于是我建了一个WebResouceController,二级目录叫做Attach,于是我写了一个控制器方法Attach,然后配了一条路由,如下:routes.MapRoute("attach","{controller}/{action}/{mType}/{fileName}",new{controller="WebResource",action="Attach"});接着,最关键的来了!要确保RouteConfig中routes.RouteExistingFiles设置为false,且Web.config文件中要加这么一行<system.webServer><modulesrunAllManagedModulesForAllRequests="true"/></system.webServer>然后就能实现输入静态地址,请求进到Controller里了,但是看到一个帖子http://www.cnblogs.com/xishuai/p/Styles-Render-runAllManagedModulesForAllRequests-true-go-on.html这里头说runAllManagedModulesForAllRequests最好不要用,因为它会让所有的静态资源请求都由控制器处理,这样会损耗性能,可是如果不加这一句的话所有的静态资源请求都会被IIS抢先处理掉,怎么办呢?然后RouteConfig中routes.RouteExistingFiles这条设置本来作用是把静态请求转给Controller处理的,可是单单这条设置根本不能实现这个效果,并且如果同时把runAllManagedModulesForAllRequests和RouteExistingFiles设置都设成true会出问题,所有的.html页面都变成404,不知道是什么原因,这2条设置的作用都是把静态请求转给控制器处理,区别在哪里呢?为什么2个设置不能同时使用,又是为什么同时使用了会造成网页404的问题呢?有没有更好切实可行的解决方案也推荐一下,先谢谢各位了

解决方案

解决方案二:
先顶起来,没人知道吗?
解决方案三:
请求1.jpg请求http://IP/controller/action/fileName这个地址,这个方法会在后台用FILE类把文件提出来输出给请求者。如果FILE类找不到文件,调一个方法,从数据库恢复文件,把文件输出给请求者。这有理由有什么关系,看不明白

时间: 2024-09-20 05:31:59

求助!关于.Net MVC中伪静态和防盗链设置的一些问题的相关文章

nginx中nginx防盗链设置和重定向规则

rewrite命令 nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,location 和IF条件判断块中,命令格式如下: rewrite 正则表达式 替换目标 flag标记 flag标记可以用以下几种格式: last – 基本上都用这个Flag. break – 中止Rewirte,不在继续匹配 redirect – 返回临时重定向的HTTP状态302 permanent

详解iis httpd.ini中IIS图片防盗链的方法_win服务器

一.创建目录 e:Rewrite 把 Rewrite 下的四个文件(httpd.ini .httpd.parse.errors.mtbnotif.dll.Rewrite.dll)上传到这里. 二.设置IIS属性,选择网站属性,到ISAPI筛选器, 关闭属性对话框. 再次查看网站属性,到ISAPI筛选器 如果看到状态为向上的绿色箭头,就说明Rewrite模块安装成功了. 点添加,在名称中输入rewrite,可执行文件选择刚才解压后的文件Rewrite.dll,点确定:再点确定, 三.修改 e:Re

iis httpd.ini中IIS图片防盗链

一.创建目录 e:Rewrite 把 Rewrite 下的四个文件(httpd.ini .httpd.parse.errors.mtbnotif.dll.Rewrite.dll)上传到这里. 二.设置IIS属性,选择网站属性,到ISAPI筛选器, 关闭属性对话框. 再次查看网站属性,到ISAPI筛选器 如果看到状态为向上的绿色箭头,就说明Rewrite模块安装成功了. 点添加,在名称中输入rewrite,可执行文件选择刚才解压后的文件Rewrite.dll,点确定:再点确定, 三.修改 e:Re

Windows系统中IIS防盗链设置详细介绍

首页我们安装一个组件:isapi.msi 安装完后,对软件安装目录的IIS_WGP组的读写权限(重要,如果不设置安装完后你的网站就会直接Service Unavailable,无法访问). 假如你的安装目录是D:Program FilesHeliconISAPI_Rewrite(默认安装目录是Program FilesHeliconISAPI_Rewrite,我们可以先建立),右击ISAPI_Rewrite,选择"属性"->"安 全"->"添加

Nginx中图片防盗链设置方法详解

由于有时候一些其他网站会调用本站的图片,nginx本身是可以屏蔽其他网站调用本站图片,方式如下: 根据后缀: location ~ \.(gif|jpg|png|swf|flv|bmp)$ {     valid_referers none blocked *. 111cn.net;     if ($invalid_referer) {     return 404; } } 根据目录:  location /images/ {   root /web/site/www/;   valid_r

Apache防盗链设置

如果你的站点是一个图片站,有很多非常漂亮的美女图片,那我相信,时间久了会有很多人来你网站借图片,有的人直接下载走了,还有的人直接取走图片的地址,比如你的网站域名是www.123.com,图片地址为www.123.com/images/111.jpg,那么他就可以直接把这个地址放到他自己的网站上,他的用户可以直接从他网站上查看这个图片,而实际上浏览这个图片是从你的网站上访问的.这样,这个图片所产生的带宽开销对于你来说没有任何意义,毕竟看这个图片的人不是你的客户,而是人家的.明白了这个道理,那我们就

php图片文件 下载文件 防盗链设置方法

php防盗链  代码如下 复制代码 <?php session_start(); session_register('check'); $_SESSION['check']=true; ?> 检查session变数,判断是否造访首页.并且检查他的来源网页参考(HTTP_REFERER)是否来自本地网站的网页. 方法如下:  代码如下 复制代码 <?php session_start(); $refs = parse_url($_SERVER['HTTP_REFERER']); //分解参

Nginx 防盗链设置

何谓'盗链' 此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容. 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐.图片.软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量. 比较明显的是图片资源,自己的服务器不存储图片资源,而使用别人的图片资源,这样无需承担图片的存储跟流量所产生的费用.总之,是非常无耻的行径. 如何防盗链 要实现防盗链,需要了解HTTP协议中的请求头部 R

简易方法实现网页图片防盗链设置

图片防盗和图片防盗链有什么区别呢?图片防盗: 是不想自己的图片被别人使用.图片防盗链: 是不想自己的图片被别人使用,且消耗的是自己的服务器流量.图片防盗是困难的,完美的图片防盗那几乎是不可能的.但还是有很多方法能够减少图片盗用. 今天我们使用空白图片覆盖真实图片,这个方法可以让别人无法获取真实的图片,除非查看源代码.你可以把真实的图片做为背景图片,而使用一张透明图片匹配尺寸并覆盖到真实图片上面. <div id="image1" style="background-im