首页 文章 精选 留言 我的

精选列表

搜索[.NET框架],共10000篇文章
优秀的个人博客,低调大师

《Pro ASP.NET MVC 3 Framework》学习笔记之十九【URL和Routing】

创建传出的URL(Outgoing URLs) 处理传入的URL(Incoming URLs)仅仅是路由系统的一部分功能。我们也需要使用URL架构来创建Outgoing URLs,我们可以将这些URL嵌入到我们的View里面,并且能够让用户点击URL提交表单给我们的应用程序,并能够命中合适的controller和action。 下面会展示用不同的技术来创建Outgoing URLs: 最便捷的创建Outgoing URLs就是手动定义如:<a href="/Home/About">About this application</a> 这样的URL。这个URL会命中HomeController中的About action方法。手动定义Outgoing URLs的确非常便捷,但是这样做也是非常危险的,因为一旦你改变了自己应用程序的URL架构,你就打破了所有手动创建的Outgoing URLs。你必须排查修改所有的View里面的Outgoing URLs,并更新所有的Controller和Action中对这些URL的引用。 Routing System能够从URL架构创建URL,因此如果URL架构发生了变化,那么由此创建在View里面的Outgoing URLs也会随之发生改变。显然这种方式才是明智之举,但也需要我们在前期做一些初始化的工作,这是非常值得的,长远来看这会让我们获益匪浅。 下面会通过实例来说明,仍然借用前面的项目, 只不过做些修改:1)移除AdditionalControllers 2)修改RegisterRoutes如下: View Code 最简便的在View里面创建一个Outgoing URL就是调用Html.ActionLink方法。如:@Html.ActionLink("关于", "About").该方法是根据当前的URL架构创建URL的,查看页面的源文件可以发现该URL为<a href="/Home/About">关于</a>。假设我们改变URL架构如下: View Code 我们会得到这样的一个URL:<a href="/App/DoAbout">关于</a> 理解输出的URL路由匹配 通过上面的介绍,我们已经了解了路由系统是怎么根据URL架构的改变来创建的Outgoing URL的。应用程序通常会定义若干路由,所以理解路由怎样被选中来进行URL创建就非常重要。路由系统是按照路由被添加到RouteCollection里面的顺序来处理的,RouteCollection对象是要传递给RegisterRoutes方法。对每一个路由会根据下面三个条件来进行是否匹配的检查: 1)提供的值必须对定义在URL模式里面的每一个segment变量是可用的。 为每一个segment寻找值时遵循如下规则: 首先,路由系统会在我们提供的值,也就是定义在匿名类型的属性里面的值中寻找 其次,在当前请求的变量值里寻找 最后,在我们定义路由时提供的默认值里面寻找 2)我们提供的segment变量的值可能都与定义在route里面的默认变量(default-only)一致。这些变量的默认值已经提供,但是这些变量并没有出现在我们定义的URL模式中。 例如有这样一个路由:routes.MapRoute("MyRoute", "{controller}/{action}", new { myVar = "true" });其中myVar就是default-only变量,为了让这个路由匹配, 我们必须注意不要为myVar提供一个值或确保我们提供的值能够匹配默认值。 3)所有segment变量的值必须满足路由约束 要明确的是:路由系统不是寻找最佳的匹配路由,仅仅是找第一个匹配的然后用它创建URL。只有找到了一个匹配的路由,那么路由系统就会忽略后面所有的路由。因此,我们定义路由时一定按照从具体到模糊的顺序。 下面进行单元测试Outgoing URLs View Code 针对其他控制器(Targeting Other Controllers) ActionLink方法默认是假定我们针对的是同一个Controller中的action方法,由该action方法来呈现view。如果要指定其他的Controller可以多加个参数如:@Html.ActionLink("About this application", "About", "MyController")。 传递额外的值(Passing Extra Values) 我们可以使用匿名类型的属性来传递segment变量的值。如@Html.ActionLink("About this application", "About", new { id = "MyID" })。生成的URL如下: <a href="/Home/About/MyID">About this application</a> 理解segment变量的重用 在我们描述路由匹配到传出的URLs时,我们提到当为每一个segment变量寻找值时,路由系统将会从当前的请求中寻找。现在我们定义这样一个路由如下: routes.MapRoute("MyRoute","{controller}/{action}/{color}/{page}") 接着在Index视图里面定义这样一个连接:@Html.ActionLink("点我啊", "Index", "Home", new { page = 789}, null).运行程序首先输入如下URL: http://localhost:<port>/Home/Index/Purple/123。页面呈现的链接是:<ahref="/Home/Index/Purple/789">点我啊</a>. 我们定义链接时并没有给color赋值,而这里的Purple是怎么来的呢? 这就是重用了刚开始传入的URL:http://localhost:<port>/Home/Index/Purple/123中的color值Purple。而且路由系统是重用page之前的segment变量的值。当我们对ActionLink做下修改:@Html.ActionLink("Click me", "List", "Catalog", new {color="Aqua"}, null); 这里我们提供了color的值,因为color在page之前,所以这里不会重用传入URL的color值。展示为:<ahref="/?color=Red">点我啊</a> 这里强烈建议我们避免这种行为出现,而是在定义URL模式时提供你需要的所有segment变量的值。 当我们提供的值跟segment变量的值不一致时,这个值会作为querystring附加在URL的后面。 例如:@Html.ActionLink("About this application", "About", new { id = "MyID", myVariable = "MyValue" }),创建的连接显示如下: <a href="/Home/About/MyID?myVariable=MyValue">About this application</a> 。 如果我们提供的值碰巧跟默认值一样,这时路由系统会忽略来自Outgoing URL的变量。例如:创建这样一个链接 @Html.ActionLink("About this application", "Index", "Home") 。显示的链接就是这样:<a href="/">About this application</a> 指定HTML属性 我们可以为创建的链接指定css样式,如可以指定一个样式类别为myCSSClass可以这样做: @Html.ActionLink("About this application", "Index", "Home", null, new {id = "myAnchorID",@class = "myCSSClass"})注意这里用了一个"@"符号,因为class是C#里面关键字,这里需要的是HTML样式类名。这样展示的<a>标签会多一个属性:<aclass="myCSSClass"href="/" id="myAnchorID">About this application</a> 创建绝对路径的URL 前面创建的都是相对路径,我们还可以创建全路径如下: @Html.ActionLink("About this application", "Index", "Home", "https", "myserver.mydomain.com", "myFragmentName",new { id = "MyId"}, new { id = "myAnchorID", @class = "myCSSClass"}) 。 这里建议我们尽量使用相对路径。因为全路径依赖于呈现给用户的应用程序的基础架构,有太多依赖绝对路径的大的应用程序最后因为网络基础设施或域名策略的改变而被破坏,而这种变化常常是程序员无法控制的。 有时我们需要将URL作为文本显示在页面上,这是可以是用Url.Action(),用法跟Html.ActionLink类似。 根据Routing Data创建链接或URL 如@Html.RouteLink("Routed Link", new { controller = "Home", action = "About", id="MyID"})。 在页面展示的链接如下: <a href="/Home/About/MyID">Routed Link</a> 使用Url.RouteUrl方法可以让创建的链接以文本形式显示。 在Action方法里面创建Outgoing URLs 大多数情况下,我们会在View里面创建Outgoing URLs,但有些时候我们也需要在action方法里面做类似的事情。方法一样,如下所示: View Code 根据一个具体的Route创建URL 我们在使用routes.MapRoute()时一般传了一个名字作为参数,如下面这样的: routes.MapRoute("MyRoute", "{controller}/{action}"); routes.MapRoute("MyOtherRoute", "App/{action}", new { controller = "Home" }); 给route命名有如下两个理由: 1.可以用来提示该路由的作用 2.在创建Outgoing URL时可以选择具体的route 我们在使用@Html.ActionLink("Click me","About")时具体会选择那一个route呢? 答案就是:定义在RegisterRoutes()里面的第一个route。这里选择的就是MyRoute。当然我们也可以自己指定一个route,如@Html.RouteLink("Click me", "MyOtherRoute", new { action = "About" }); 不建议使用命名路由的情形 创建Outgoing URL依赖route命名会打破"分解关注点"(这是MVC设计模式的核心思想)。当在view或action里面创建URL或链接时,我们的关注点是用户将被定向到的action和Controller,不是要使用的URL格式。所以我们倾向于避免给route命名,而是是用null代替。 好了,今天的笔记做到这里! 周末愉快! 本文转自Rt-张雪飞博客园博客,原文链接http://www.cnblogs.com/mszhangxuefei/archive/2012/02/18/mvcnotes_19.html如需转载请自行联系原作者 张雪飞

优秀的个人博客,低调大师

“NET网络”进行中,多管齐下的人才力挫“”粗俗

随着互联网的迅猛发展,一些不太干净、低俗的甚至色情的内容不断浮现。不仅严重影响了我们的上网体验,也成为扰乱互联网正常秩序的罪魁祸首,部分不法内容甚至给网民造成了一定的財产损失。在这样的背景下,打击互联网低俗和色情已成为迫在眉睫的一项工作。 今年,北京市政府正式将每年4月29日设为“首都网络安全日”,而网络安全的一个重要主题,就是杜绝色情和不良内容。前不久。快播转型一事给互联网行业敲响了警钟。这一案例说明,互联网行业要健康发展,必须远离低俗和色情。我们在对快播转型表示支持和认可的同一时候,也必须意识到互联网“扫黄”形势的严峻性,毕竟仍有很多其它的互联网企业须要增加进来。为“净网”做出自己应有的贡献? 哪些互联网服务可能出现低俗和色情? 那么,哪些互联网服务可能出现低俗和色情内容?首先。诸如快播这样的相对开放的视频平台是一方面,由于有些人可能利用这些平台传播低俗和色情内容,提供不良视频供用户下载。其次。一些论坛和社区,小型交友平台可能会成为色情滋生的温床,这些平台差点儿没有内容筛查和审核机制,而为了吸引用户提升流量,这些小站点铤而走险,公然传播不良信息,并且对这类小站点的打击往往非常难凑效。由于架设小站点的成本非常低。 除此之外,另一些提供互动娱乐的平台,比方像天鸽旗下的新浪Show、9158这样的。由于服务的特性,一些网友可能会利用这类平台制造不良内容,并且,由于这些平台很大,要彻底杜绝色情则需从更系统的层面来做,从天鸽眼下的经营状况来看。他们在这方面似乎已经有了比較好的解决方式。 杜绝色情是个“技术活” 实际上,杜绝色情是个技术活,由于色情内容基本以图片、视频的方式来传播,要在海量的内容中准确识别哪些属于色情内容,这须要很高的技术才干实现,一般的互联网企业未必能达到这种技术要求;即便他们有这个技术实力,也不一定会投入巨资去研发。 针对这一点,天鸽集团早在2008年就设置了“即时快照”系统和图像自己主动检測过滤技术,对房间内容进行监管和排查,这两项技术近几年执行良好,在净网方面发挥了重要作用。后来。天鸽集团又针对性的自主开发了多项内容监控软件。并获得了《计算机软件著作权登记证书》。当中包含:“天格智能高清图像检測管理软件”、“天格绿色视频管理系统软件”、“天格不良聊天语言过滤软件”、“天格视频游戏平台后台管理监控软件”和“天格网络平台低俗语音识别软件”。 另外。天鸽集团还自主开发了一套技术方法,并持有此方法的国家发明专利。该技术方法为“基于多层特征的不良图像自己主动过滤方法”。同一时候,天鸽集团仍在申请一项名为 “基于支持向量机的不良语音识别方法”的专利。它有利于对语音信息进行安全分析和识别。 由此可见,天鸽集团正致力于从多个层面去杜绝色情,从这些举措来看。通过技术创新提升对色情内容的识别率和筛查率是“净网”的重要途径。 “净网”须要更严格的监管制度 当然,技术手段仅仅是净网的一个策略,要想从根本上杜绝色情,还必须出台更严格的监管制度才行。 一些互联网平台之所以色情泛滥,根本原因在于制度不到位。无法对员工形成有效约束,导致疏于管理,纵容色情的滋生。 以9158为例。9158在监管制度方面实现了规范化、常态化,全公司自上而下形成有效监督。确保平台安全、健康的执行。除了刚才提到的技术支持之外,9158平台另一套全面的监控体系和人工监管体系,通过人机合一的模式确保“不遗漏”、“不误判”。 此外。天鸽集团还先后颁布了《聊天室/室主/房间管理员管理规范》、《视频房间管理制度》、《主持人管理制度》,分别针对管理员、会员、主持人这三大群体的行为作出具体规范。以维护互联网互动社区的安全。而除了这些制度之外,天鸽集团还将该体系扩展到更广泛的用户群中。即用户一旦发现有人传播色情信息。能够通过平台举报。天鸽的工作人员将对其进行处理,这样的模式让用户也增加到网络环境的净化中来。不仅提高了效率,也培养了用户的净网意识。 随着“净网”行动的逐步深化。我们希望未来能有很多其它互联网企业能像天鸽一样,以身作则,从多个层面力挫“低俗”和“色情”。(文/王易见 QQ:543415188) 微信公众账号:每日互联网新闻 欢迎关注每日互联网最前沿资讯 版权声明:本文博客原创文章,博客,未经同意,不得转载。 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4679733.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册