MVC – 15.路由机制
15.1.路由检测插件 - RouteDebug
15.2.路由约束
15.3.命名路由
15.4.验证码
15.5.ASP.NET MVC 与 三层架构
15.6.Area区域
- 15.6.1.尝试将区域注册类放到 另外一个程序集中
- 15.6.2.AreaName
- 15.6.3.将区域控制器放到外面程序集
15.7.将控制器类都放到单独程序集中
15.8.重新使用外部项目保存区域控制器
15.1.路由检测插件 - RouteDebug
具体参阅 官方网站。
下载地址:http://files.cnblogs.com/tangge/RouteDebugger-2.1.3.0.zip
RouteDebugger的使用方法和RouteDebug的差不多,都是新建一个lib文件放第三方插件,然后添加引用。MVC3的不需要在Global文件里面的Application_Start中注册,这是因为.NET4.0新增的程序集Microsoft.Web.Infrastructure允许动态注册HttpModule,RouteDebugger将格式化的路由调试信息追加(append)到每一个request里。这里需要注意一下,如果web.config文件中没有如下代码的要记得添加上
<appSettings>
<add key="RouteDebugger:Enabled" value="true"/>
</appSettings>
15.2.路由约束
允许URL段使用正则表达式来限制路由是否匹配请求
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Stu", action = "Index", id = UrlParameter.Optional }
, constraints: new { id = @"\d" }
); routes.MapRoute(
name: "Default2",
url: "{controller}/{action}/{name}",
defaults: new { controller = "html", action = "printname", name = UrlParameter.Optional }
, constraints: new { name = "[a-z]+" }
);
HtmlController.cs
// html/printid/1
public ActionResult PrintId(int? id)
{
if (id == null)
{
id = 0;
}
return Content("id=" + id.ToString());
}
// html/printname/mama
public ActionResult PrintName(string name)
{
if (name == null)
{
name = "";
}
return Content("name=" + name.ToString());
}
15.3.命名路由
生成指定路由名的 url超链接
@Html.RouteLink("test", "Default", new {contorller="home",action ="index",id=1 } );
会按照找到的路由规则生成超链接(没有使用默认值)
15.4.验证码
创建一个控制器 HelpController.cs
public class HelpController : Controller
{
/// <summary>
/// 验证码
/// </summary>
/// <returns></returns>
public ActionResult VCode()
{
Common.VCode v = new Common.VCode();
byte[] arrImg = v.GetVCode();
return File(arrImg, "image/jpeg");
}
}
引用一个生成验证码图片 字节数组
VCode.cs文件
VCode.cs
VCode.cs using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;
using System.IO; namespace _06MVCAjax_CodeFirst.Common
{
public class VCode
{
/// <summary>
/// 生成验证码图片 字节数组
/// </summary>
/// <returns></returns>
public byte[] GetVCode()
{
using (Image img = new Bitmap(65, 30))
{
string strCode = GetRandomStr();
HttpContext.Current.Session["vcode"] = strCode;
using (Graphics g = Graphics.FromImage(img))
{
g.Clear(Color.White);
g.DrawRectangle(Pens.Blue, 0, 0, img.Width - 1, img.Height - 1);
DrawPoint(g);
g.DrawString(strCode, new Font("微软雅黑", 15), Brushes.Blue, new PointF(5, 2));
DrawPoint(g);
using (System.IO.MemoryStream ms = new MemoryStream())
{
//将图片 保存到内存流中
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
//将内存流 里的 数据 转成 byte 数组 返回
return ms.ToArray();
}
}
}
return null;
} Random random = new Random(); string GetRandomStr()
{
string str = string.Empty;
string[] strArr = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" };
for (int i = 0; i < 4; i++)
{
int index = random.Next(strArr.Length);
str += strArr[index];
}
return str;
} void DrawPoint(Graphics g)
{
Pen[] pens = { Pens.Blue, Pens.Black, Pens.Red, Pens.Green };
Point p1;
Point p2;
int length = 1;
for (int i = 0; i < 50; i++)
{
p1 = new Point(random.Next(79), random.Next(29));
p2 = new Point(p1.X - length, p1.Y - length);
length = random.Next(4);
g.DrawLine(pens[random.Next(pens.Length)], p1, p2);
}
}
}
}
15.5.ASP.NET MVC 与 三层架构
MVC是表现模式(设计模式)
三层是架构模式(代码架构/物理架构)
15.6.Area区域
MVC 项目目录结构 缺点:
1.不利于分功能协作开发(购物车/商品管理/用户权限管理…)
2.代码结构臃肿…
15.6.1.尝试将区域注册类放到 另外一个程序集中
查找方式
1.程序集
2.命名空间
3.是否继承AreaRegistration
15.6.2.AreaName
public class SbAreaRegistration : AreaRegistration
{
public override string AreaName //AreaName在某个区域的 控制器的Action方法 加载视图时 作为 路径的一部分使用
{
get
{
return "Sb3";
}
}
15.6.3.将区域控制器放到外面程序集
15.7.将控制器类都放到单独程序集中
依赖注入:当前类里面有一个全局变量,这个变量在类里面不实例化,由外面通过属性或者构造函数传进来,这个传的过程就叫依赖注入。
例:
FangZi类,声明一个BingXiang对象。BingXiang到底是5000还是50000,FangZi决定不了。
FangZi.属性,从外面new 一个BingXiang传进来,这个过程就是依赖注入。
FangZi.BingXiang = xxx;
反过来,FangZi里面没有BingXiang。外面new一个BingXing传进来,这个就叫控制反转。
(将控制器类都放到单独程序集中)步骤:
其实就是看是否继承自 System.Web.Mvc 里面的 Controller 类
加命名空间执行的结果是一样的,但是提高效率·自定义控制访问。(多命名空间的时候)
15.8.重新使用外部项目保存区域控制器
MVC – 15.路由机制的更多相关文章
- MVC – 15.路由机制
15.1.路由检测插件 - RouteDebug 15.2.路由约束 15.3.命名路由 15.4.验证码 15.5.ASP.NET MVC 与 三层架构 15.6.Area区域 15.6.1.尝试将 ...
- 【ASP.NET MVC】 路由机制:命名路由
首先看一下命名路由和没有命名的差别: 命名路由: routes.MapRoute( name: "Test", // Route name url: "code/p/{a ...
- MVC路由机制(转)
今天我来缕一下MVC的路由机制,因为使用MVC已经快一年了,之前也只是上手,没有系统去理会.项目完了,结合实际使用,回过头来深入一下. MVC 学习索引(点击即可) 一个请求进入IIS后 传统ASP. ...
- mvc url路由参数的加密和解密
查看某个信息的时候一般会在url上加上该信息在数据库中对应的主键id(而且一般是自增的) url是这样子的 xxxDetail/1 , 虽然对于我们开发人员来说可以这种显式的数据库主键会方便调试过程, ...
- MVC5之路由机制
---恢复内容开始--- MVC是一种模式,是基于asp.net上的一种设计.路由机制不属于MVC,路由机制属于asp.net.因此,mvc的路由机制就是基于asp.net路由机制上的一种“自定制”. ...
- ASP.NET MVC3 学习心得------路由机制
9.1 理解URL URL满足的要求: l 域名易于记忆和拼写 l 简短.易输入 l 可以反应出站点的结构 l 可破解,用户可以通过移除URL的末尾,进而达到更高层次的信息体系结构 l 持久.不能变化 ...
- asp.net MVC 路由机制
1:ASP.NET的路由机制主要有两种用途: -->1:匹配请求的Url,将这些请求映射到控制器 -->2:选择一个匹配的路由,构造出一个Url 2:ASP.NET路由机制与URL重写的区 ...
- asp.net MVC 路由机制 Route
1:ASP.NET的路由机制主要有两种用途: -->1:匹配请求的Url,将这些请求映射到控制器 -->2:选择一个匹配的路由,构造出一个Url 2:ASP.NET路由机制与URL重写的区 ...
- MVC路由机制
按照传统,在很多Web框架中(如经典的ASP.JSP.PHP.ASP.NET等之类的框架),URL代表的是磁盘上的物理文件.例如,当看到请求http://example.com/albums/li ...
随机推荐
- [ACM][2018南京预赛]Magical Girl Haze
一.题面 样例输入: 15 6 11 2 21 3 42 4 33 4 13 5 64 5 2 样例输出: 3 二.思路 关键词:分层BFS 考试时觉得题干意思很清晰——求可将k条边赋值为0的最短路. ...
- 【loj2064】找相同字符
Portal --> loj2064 Solution 这里是用后缀数组做的版本!(晚点再用Sam写一遍qwq) 首先一个字符串的子串其实就是这个字符串某个后缀的前缀,所以我们有一个十分简单 ...
- python基础----文件处理
一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 正趣果上果 Interesting fruit fruit 词:郭婞 曲:陈粒 编曲/混音/和声:燕池 萧: ...
- 传说中的 SonarLint
Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的 ...
- 使图片水平并垂直居中的一个Hack
淘宝的一个前端面试题:使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中. 想起了vertical-align:middle;但是不行,后来才知道还要di ...
- openresty--centos7下开发环境安装
1. 安装依赖的软件包 yum install readline-devel pcre-devel openssl-devel gcc 2. 安装openresty -- 1. 下载openresty ...
- Measure the size of a PostgreSQL table row
Q: I have a PostgreSQL table. select * is very slow whereas select id is nice and quick. I think i ...
- \G,sql中select 如果太长,可以在后面放\G,竖行显示~~~~
1.使用\G按行垂直显示结果 如果一行很长,需要这行显示的话,看起结果来就非常的难受. 在SQL语句或者命令后使用\G而不是分号结尾,可以将每一行的值垂直输出. mysql> select * ...
- jquery ajax thinkphp异步局部刷新完整流程
环境:ThinkPHP3.2.3,jQuery3.2 前言: 在一般的网站中,都需要用到jquery或者其他框架(比如angular)来处理前后端数据交互,thinkphp在后台也内置了一些函数用 ...
- <LC刷题一>相加为0的数之leetcode1&2&15&16
--题目导航见页面左上角的悬浮框#目录导航#-- 相似题型导航 1.1 twosum两数之和 || 2.2 3Sum三数之和 || 2.3 3Sum Closest最接近的三数之和 ----- ...