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 ...
随机推荐
- 热更新脚本C#light,ulua,Scorpio性能比较
http://www.unity蛮牛.com/thread-32861-1-1.html 测试环境: unity4.5.2 三个脚本全是源码导入 PC :处理器 Intel(R) Core(TM) ...
- OpenGL中平移、旋转、缩放矩阵堆栈操作
在OpenGL中,图元的几何变换均为线性变换,通过矩阵变换实现.OpenGL中的坐标用齐次坐标表示,即(x,y,z)表示成(x',y',z',h),其中x=x'/h; y=y'/h; z=z'/h. ...
- Java计算程序运行时间
public static void main(String[] args) { // TODO Auto-generated method stub long nd = 1000 * 24 * 60 ...
- java的事务处理
本文转自http://zhenchengchagangzi.iteye.com/blog/1159493 java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务.如果数据库操作在 ...
- zookeeper部署及集群测试
zookeeper部署及集群测试 环境 三台测试机 操作系统: centos7 ; hostname: c1 ; ip: 192.168.1.80 操作系统: centos7 ; hostname: ...
- Unity关于用LoadLevelAdditiveAsync导致新场景的Navmesh数据不正确Loading条的实践
为了解决用Application.LoadLevelAdditiveAsync 导致新场景的Navmesh数据不正确(我们用的是4.63),我们现在loading条做法是先切到Loading的场景,然 ...
- 关于Intent ,Task, Activity的理解
看到一篇好文章,待加工 http://hi.baidu.com/jieme1989/item/6e5f41d3f65be848ddf9beb9 第三篇 http://blog.csdn.net/luo ...
- 8.nodejs权威指南--MongoDB
1. MongoDB var mongo = require('mongodb'); var host = '127.0.0.1'; var port = mongo.Connecton.DEFAUL ...
- [转] Android利用tcpdump抓包
原文链接:http://mysuperbaby.iteye.com/blog/902201 Android利用tcpdump抓包 博客分类: Android AndroidAccessGoHTML ...
- codeforces 514B. Han Solo and Lazer Gun 解题报告
题目链接:http://codeforces.com/problemset/problem/514/B 题目意思:给出双头枪的位置(x0, y0),以及 n 个突击队成员的坐标.双头枪射击一次,可以把 ...