对指定磁盘文件路由,而对其他磁盘文件不路由

在上一个例子中,有路由定义:


        public static void RegisterRoutes(RouteCollection routes)
{
routes.RouteExistingFiles = true;
routes.MapRoute("DiskFile", "Content/StaticContent.html",
new { Controller = "Account", Action = "LogOn" },
new { customConstraint = new UserAgentConstraint("Chrome") });

routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
new { Controller = "Home", Action = "Index", id = UrlParameter.Optional },
new { Controller="^H.*", Action="^Index$|^About$",
httpMethod = new HttpMethodConstraint("GET")},
new[] { "_11_3URLTestDemo.Controllers" });
}

因为打开了routes.RouteExistingFiles =
true;表明对磁盘文件都要进行路由,但是下面的路由匹配中,对磁盘文件只有一个静态匹配,也就是说只有使用Chrome浏览器对于"~/Content/StaticContent.html"的访问才会匹配到第一个定义的路由,路由到AccountController的LogOn方法上。

考虑这样的情况:在当前项目(11-3URLTestDemo)的Content文件上Add->New Item->Visual
C#->Web->HTML Page,新建一个Hello.html的文件:


<html>
<head>
<title>Hello</title>
</head>
<body>
<h2>Hello,the world.</h2>
</body>
</html>

执行程序,如果发起对"~/Content/Hello.html"的访问,资料上给出的说明是第一个路由不匹配,会匹配第二个路由,也就是将Controller匹配为Content,将Action匹配为Hello.html,由于没有这样的控制器和方法,所以会给出404错误。但实际在实验时,发现这种情况仍然访问到的是Hello.html文件,是否在MVC3中匹配后如果都没有匹配,会自动去寻找有没有该磁盘文件?

按原意,如果因为去匹配控制器和动作方法导致Hello.html无法访问,解决的方法是设定routes.IgnoreRoute绕过路由。例如:


        public static void RegisterRoutes(RouteCollection routes)
{
routes.RouteExistingFiles = true;
routes.MapRoute("DiskFile", "Content/StaticContent.html",
new { Controller = "Account", Action = "LogOn" },
new { customConstraint = new UserAgentConstraint("Chrome") });

routes.IgnoreRoute("Content/{filename}.html");

routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
new { Controller = "Home", Action = "Index", id = UrlParameter.Optional },
new { Controller="^H.*", Action="^Index$|^About$",
httpMethod = new HttpMethodConstraint("GET")},
new[] { "_11_3URLTestDemo.Controllers" });
}

对指定磁盘文件路由,而对其他磁盘文件不路由

时间: 2024-11-02 03:39:14

对指定磁盘文件路由,而对其他磁盘文件不路由的相关文章

类型:.net;问题:ASP.NET路由;结果:ASP.NET 路由 .NET Framework 4

ASP.NET 路由 .NET Framework 4 更新:2007 年 11 月 ASP.NET 路由使您可以使用不必映射到网站中特定文件的 URL.由于 URL 不必映射到文件,所以可以在 Web 应用程序中使用 URL,这些 URL 是描述性的用户操作,因此更易于被用户理解. 在一个不使用路由的 ASP.NET 应用程序中,对 URL 的传入请求通常映射到磁盘上的物理文件,如 .aspx 文件.例如,对http://server/application/Products.aspx?id=

深入理解Linux网络技术内幕——路由子系统的概念与高级路由

本文讨论IPv4的路由子系统.(IPv6对路由的处理不同). 基本概念 路由子系统工作在三层,用来转发入口流量. 路由子系统主要设计 路由器.路由.路由表等概念. 路由器: 配备多个网络接口卡(NIC),并且能利用自身网络信息进行入口流量转发的设备. 路由: 流量转发,决定目的地的过程 路由表:转发信息库,该库中储存路由需要本地接收还是转发的信息, 以及转发流量时所需要的信息.(即,信息库用来判断,要不要转发,如果要转发,向哪里转发). 我们了解,路由器有多个网卡,但是多个NIC的设备不一定就是

Vue配置路由和传参方式及路由守卫!

安装路由 npm i vue-router -S 引入路由 import VueRouter form VueRouter 注入路由模块 Vue.use(VueRouter) 定义路由匹配规则 let routes = [ {...}, {...} ] 上列匹配规则中 对象有如下属性 path : 路由路径 component : 所加载的组件 name : 别名 redirect : 重定向 children : 子级路由 创建路由实例 let router = new VueRouter({

理解Web路由(浅谈前后端路由与前后端渲染)

1.什么是路由? 在Web开发过程中,经常会遇到『路由』的概念.那么,到底什么是路由?简单来说,路由就是URL到函数的映射. 2.router 和 route 的区别 route就是一条路由,它将一个URL路径和一个函数进行映射,例如: /users -> getAllUsers() /users/count -> getUsersCount() 这就是两条路由,当访问 /users 的时候,会执行 getAllUsers() 函数:当访问 /users/count 的时候,会执行 getUs

AngularJS路由系列(5)-- UI-Router的路由约束、Resolve属性、路由附加数据、路由进入退出事件

本系列探寻AngularJS的路由机制,在WebStorm下开发.主要包括: ● UI-Router约束路由参数● UI-Router的Resolve属性● UI-Router给路由附加数据● UI-Router的onEnter和onExit事件 AngularJS路由系列包括: 1.AngularJS路由系列(1)--基本路由配置2.AngularJS路由系列(2)--刷新.查看路由,路由事件和URL格式,获取路由参数,路由的Resolve3.AngularJS路由系列(3)-- UI-Rou

Linux3.5内核对路由子系统的重构对Redirect路由以及neighbour子系统的影响

几年前,我记得写过好几篇关于Linux去除对路由cache支持的文章,路由cache的下课来源于一次对路由子系统的重构,具体原因就不再重复说了,本文将介绍这次重构对Redirect路由以及neighbour子系统的影响. 事实上,直到最近3个月我才发现这些影响是如此之大,工作细节不便详述,这里只是对关于开放源代码Linux内核协议栈的一些实现上的知识进行一个汇总,以便今后查阅,如果有谁也因此获益,则不胜荣幸. 路由项rtable,dst_entry与neighbour IP协议栈中,IP发送由两

AngularJS路由系列(2)--刷新、查看路由,路由事件和URL格式,获取路由参数,路由的Resolve

本系列探寻AngularJS的路由机制,在WebStorm下开发.主要包括: ● 刷新路由● 查看当前路由以及所有路由● 路由触发事件● 获取路由参数 ● 路由的resolve属性● 路由URL格式 项目文件结构 node_modules/ public/.....app/..........bower_components/...............toastr/....................toastr.min.css....................toastr.min

路由基础(二)静态路由

1.静态路由 静态路由是由网络管理员手动进行配置,当网络拓扑产生变化,这时候需要手动配置. 1.1静态路由 静态路由的分为:静态路由.默认路由.指向null0的静态路由. 1.1.1静态路由是什么? 在现网中很多时候使用静态路由觉的简单才使用,或者是小型的网络才使用,因为静态路由简单,没有太复杂的选路原则. 事实上静态路由一些复杂的网络中使用也非常普遍,很多时候内网和外网对接的时候都会使用静态路由进行控制. 静态路由怎么配置? 首先要写网段=网络地址+掩码组成. 然后跟上下一跳的接口或IP地址.

vue.js路由vue-router(一)——简单路由基础

前言 vue.js除了拥有组件开发体系之外,还有自己的路由vue-router.在没有使用路由之前,我们页面的跳转要么是后台进行管控,要么是用a标签写链接.使用vue-router后,我们可以自己定义组件路由之间的跳转,还可以设置稍复杂的嵌套路由,创建真正的spa(单页面应用).我之前用vue-cli脚手架写了一个简单的人员管理实例,现在我们不用脚手架,就用原生的vue来写,本文也主要是通过实例来讲解vue.js+vue-router相关知识. 简单路由跳转实例 1.起步 下载vue-route

vue动态添加路由addRoutes之不能将动态路由存入缓存

在我不知道vue的路由还可以通过addRoutes动态添加时,我只知道vue的路由都是写死在路由表中的,每当跳转时再去加载相应的路由.直到在一个新公司接到需要根据用户的权限显示不同的菜单的需求时才知道了原来vue-router还有一个addRoutes的API,立马研究了一下. router.addRoutes: 函数签名: router.addRoutes(routes: Array<RouteConfig>) 动态添加更多的路由规则.参数必须是一个符合routes选项要求的数组. 点这里去