精通ASP.NET MVC ——属性路由

在上一篇文章中,有约定路由的介绍。MVC 5中增加了对属性路由这一新技术的支持。在属性路由中,路由是由直接运用于控制器的C#属性定义的。

启动和运用属性路由 

默认情况下属性路由是禁止的,通过MapMvcAttributeRoutes扩展方法可以启用它。该方法由RouteCollection对象调用,如下图所示:

        public static void RegisterRoutes(RouteCollection routes){routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.MapMvcAttributeRoutes();//启动属性路由routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });}

调用 MapMvcAttributeRoutes 方法导致路由系统检查应用系统中的控制器类,并寻找匹配路由属性。最重要的属性是Route。如下图所示:

    public class CustomerController : Controller{[Route("Test")]// GET: Customerpublic ActionResult Index(){ViewBag.Controller = "Customer";ViewBag.Action = "Index";return View("ActionName");}public ActionResult List(){ViewBag.Controller = "Customer";ViewBag.Action = "List";return View("ActionName");}}

当一个动作方法用Route属性修饰时,它不需要通过约定路由来访问,这意味着Customer控制器中的Index方法不再需要/Customer/Index,也不能用/Customer/Index来访问。 执行效果如下图所示:

 


使用片段变量创建路由 

虽然通过属性表示,但是属性路由支持和基于约定路由一样的特性。这些特性包括创建包含片段变量的路由。如下图所示:

    public class CustomerController : Controller{[Route("Test")]// GET: Customerpublic ActionResult Index(){ViewBag.Controller = "Customer";ViewBag.Action = "Index";return View("ActionName");}[Route("Users/Add/{user}/{id}")]public string Create(string user, int id){return string.Format("User:{0},ID:{1}",user,id);}public ActionResult List(){ViewBag.Controller = "Customer";ViewBag.Action = "List";return View("ActionName");}}

上述代码中添加了一个带有string 和 int 类型参数的动作方法Create。为了简单起见,返回一个string类型的结果,这样就不用创建一个视图了。 用Route属性定义的路由混合了静态前缀(Users/Add)以及方法参数对应的user 和 id 片段。为了调用Create方法,MVC框架使用模型绑定特性将片段变量转化成正确的类型。运行效果如下图所示:


运用路由约束 

属性路由中的约束更加直接,如下图所示:

    public class CustomerController : Controller{[Route("Test")]// GET: Customerpublic ActionResult Index(){ViewBag.Controller = "Customer";ViewBag.Action = "Index";return View("ActionName");}[Route("Users/Add/{user}/{id:int}")]public string Create(string user, int id){return string.Format("User:{0},ID:{1}",user,id);}[Route("Users/Add/{user}/{password}")]public string ChangePass(string user, string password){return string.Format("changePass Method - User:{0}, Pass:{1}",user,password);}public ActionResult List(){ViewBag.Controller = "Customer";ViewBag.Action = "List";return View("ActionName");}}

新的动作方法名称为ChangePass,有两个string类型的参数。但是为了区分Create方法,对Create方法中的Route属性运用了约束,[Route("Users/Add/{user}/{id:int}")],指定 id 接收int类型的请求。 运行效果如下图所示:

                              


组合约束 

可以将多个约束运用于一个片段,以便进一步限制路由将要匹配的值的范围,如下图所示:

        [Route("Users/Add/{user}/{password:alpha:length(6)}")]public string ChangePass(string user, string password){return string.Format("changePass Method - User:{0}, Pass:{1}",user,password);}

 使用Route Prefix

可以使用Route Prefix属性定义一个将被运用到控制器所有路由中的普通前缀,当很多动作都使用同样的根URL为目标是,这点特别有用。如下图所示:

    [RoutePrefix("Users")]public class CustomerController : Controller{[Route("~/Test")]// GET: Customerpublic ActionResult Index(){ViewBag.Controller = "Customer";ViewBag.Action = "Index";return View("ActionName");}[Route("Add/{user}/{id:int}")]public string Create(string user, int id){return string.Format("User:{0},ID:{1}",user,id);}[Route("Add/{user}/{password:alpha:length(6)}")]public string ChangePass(string user, string password){return string.Format("changePass Method - User:{0}, Pass:{1}",user,password);}public ActionResult List(){ViewBag.Controller = "Customer";ViewBag.Action = "List";return View("ActionName");}}

运行效果如下图所示:

                       

以~/为前缀告诉MVC框架,不要运用到Index动作方法的RoutePrefix属性,这意味着它仍然可以通过/Test来访问。 

 

 

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

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

相关文章

ntp的一个小错误

[rootlocalhost ~]# ntpdate 10.128.14.25 3 Apr 21:05:05 ntpdate[1506]: the NTP socket is in use, exiting 收到此错误消息的原因是由于 xntpd 已经绑定到了该 Socket。运行 ntpdate 时,它会首先进行广播,然后侦听端口 123。如果 xntpd 正在运行&am…

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

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

怀念一下过去的人和事

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

linux 调优 网络调优

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

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

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

精通ASP.NET MVC ——视图

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

使用列表选择框控件

本例使用列表选择框控件,并向其中添加删除列表项,程序运行如下图所示。 程序代码如下。 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),其作用是对代码块和标记进行打包,以便能够在整个MVC框架应用程序中重用。 首先新建一个项目,添加一个Home控制器,如下图所示: public class HomeController : Controller{// GET: Homepubli…

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

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

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

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

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

本文介绍3种线程安全模式 1,lock 2,Mutex 3,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 ——模型验证

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

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

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

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

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

防止刷票方法大全

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

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

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

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

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

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

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

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

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

Backbone.js学习笔记

为什么80%的码农都做不了架构师?>>> 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…