博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mvc(5)——URL路由_4_属性路由
阅读量:2242 次
发布时间:2019-05-09

本文共 2777 字,大约阅读时间需要 9 分钟。

1、什么是属性路由?

在属性路由中,路由是由直接运用于控制器类的C#属性定义的。在实践中,它可以自由地与标准的基于约定的路由相混合。

2、启动和使用属性路由_简单的属性的路由

默认情况下属性路由是禁用的,通过MapMvcAttributeRoutes扩展方法可以启用它,该扩展方法由RouteCollection对象调用,并且该对象作为参数传递给静态RegisterRoutes方法。

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.Web.Mvc.Routing.Constraints;using System.Web.Routing;namespace urlAndRoutes{    public class RouteConfig    {        public static void RegisterRoutes(RouteCollection routes)        {            //启用属性路由            routes.MapMvcAttributeRoutes();            routes.MapRoute( "Myroute","{controller}/{action}/{id}",                new { controller = "Home", action = "Index", id = UrlParameter.Optional },                new[] { "urlAndRoutes.Controllers" }            );        }    }}

调用MapMvcAttributeRoutes方法导致路由系统检查应用程序中的控制器类,并寻找配置路由的属性。最重要的属性是Route,下面我们对Customer控制器进行代码修改:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace urlAndRoutes.Controllers{    public class CustomerController : Controller    {        // GET: Customer        [Route("TestCustomerController")]//这是我修改的地方,这样就为index这个动作方法定义了一个静态路由。        public ActionResult Index()        {            ViewBag.Controller = "Customer";            ViewBag.Action = "Index";            return View("ActionName");        }        public ActionResult List()        {            ViewBag.Controller = "Customer";            ViewBag.Action = "List";            return View("ActionName");        }    }}

这样我们就可以这样访问了。

这里写图片描述

3、使用片段变量创建路由

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

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace urlAndRoutes.Controllers{    public class CustomerController : Controller    {        // GET: Customer        [Route("Users/add/{user}/{id}")]        public string Create(string user,int id)        {            return string.Format("user:{0},id:{1}",User,id);        }    }}

这里写图片描述

4、使用Route Prefix

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace urlAndRoutes.Controllers{    [RoutePrefix("Users")]    public class CustomerController : Controller    {        // GET: Customer        [Route("TestCustomerController")]        public ActionResult Index()        {            ViewBag.Controller = "Customer";            ViewBag.Action = "Index";            return View("ActionName");        }        [Route("~/List")]        public ActionResult List()        {            ViewBag.Controller = "Customer";            ViewBag.Action = "List";            return View("ActionName");        }    }}

为此,我们可以用访问啦。

这里写图片描述

另外,大家应该注意一下:

使用RoutePrefix属性指明动作方法的路由应该以Users为前缀。但是当出现如下模板的时候,不用users做前缀。

[Route("~/List")]

效果图如下:

这里写图片描述

源码下载:

你可能感兴趣的文章
本地如何连接hbase数据库
查看>>
Maven出错-Missing artifact org.apache.openejb:openejb-core:jar:4.1.0-SNAPSHOT:test
查看>>
dubbo配置文件xml校验报错
查看>>
eclipse生成export生成jar详解
查看>>
oracle 模糊查询忽略大小写
查看>>
Java项目导出可运行的jar文件
查看>>
Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析),兼容Windows和Linux
查看>>
JAVA读取PROPERTIES配置文件
查看>>
Linux中执行shell脚本的4种方法总结
查看>>
BufferedInputStream(缓冲输入流)详解
查看>>
修改linux文件权限命令:chmod
查看>>
Linux vi/vim编辑器常用命令与用法总结
查看>>
如何使用Git Bash Here,将本地项目传到github上
查看>>
eclipse git控件操作 回退到历史提交 重置 删除(撤销)历史的某次提交
查看>>
Oracle | 给表和字段添加注释
查看>>
java比较日期大小及日期与字符串的转换【SimpleDateFormat操作实例】
查看>>
Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence
查看>>
java中System.exit()方法
查看>>
在hbase shell中过滤器的简单使用
查看>>
java静态方法和实例方法
查看>>