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 ...
随机推荐
- 跟着百度学PHP[4]OOP面对对象编程-14-克隆对象__clone()方法
$b=clone ($a) #克隆a对象. <?php class Human { private $name; private $sex; private $age; function __c ...
- hiho #1325 : 平衡树·Treap
#1325 : 平衡树·Treap 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? ...
- BZOJ 3364: [Usaco2004 Feb]Distance Queries 距离咨询
Description 一棵树,询问两点间距离. Sol 倍增. 方向没用. 没有然后了. Code /************************************************ ...
- UICollectionView + AFNetWorking 异步加载,局部刷新.
最近在做的项目需要cell里面的数据需要和后台实时交互.而collectionview reload会整体刷新. //m层 发送通知 [[NSNotificationCenter defaultCen ...
- MyBatis 中 Result Maps collection already contains value for xxx 错误原因
出现此类错误的原因是同一个DAO操作多个Mapper导致的,将Mapper配置文件的 ResultMap的ID修改成不相同即可解决
- 统计代码git提交的行数
$ git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ a ...
- Python QRCODE
- linux下用cronolog分割apache日志
linux下用cronolog分割apache日志,大神莫拍砖,菜鸟留一记录,小白请默默转载.连linux登陆和vi编辑都不会的,请默默关闭此页面.入正题 说明:淡绿色底的为linux命令,其他的为备 ...
- Effective C++ -----条款48:认识template元编程
Template metaprogramming(TMP,模板元编程)可将工作由运行期移往编译期,因而得以实现早期错误侦测和更高的执行效率. TMP可被用来生成“基于政策选择组合”(based on ...
- 通过JavaScript操作HTML中select标签
添加: Js代码 1.function selectChange() 2.{ 3.var sel=document.getElementById("select1"); 4. Op ...