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之CI框架多语言的用法
public function index() { // 加载语言包,可以加载多个 $this->lang->load('email'); echo $this->lang-> ...
- linux 命令free -m 命令结果分析
free -m 命令详解 free -m 分析系统内存使用情况:
- 【工具】【版本控制】TortoiseSVN过滤文件与文件夹
这些网上搜一大把,就直接截图过来了.
- ASP.NET MVC Area使用-将Area设置成独立项目
环境说明:Vistual Studio 2013 MVC 4.0 其实关于ASP.NET MVC Area使用的基础知识可以参考 http://www.cnblogs.com/willick/p/33 ...
- discuz内置常用CSS代码分析
CSS多IE下兼容HACK写法 所有 IE浏览器适用:.ie_all .foo { ... } IE6 专用:.ie6 .foo { ... } IE7 专用:.ie7 .foo { ... } IE ...
- 解决Python往MySQL插入中文时报错的问题
今天遇到一个问题,用Python往MySQL插入数据时,若数据中包含中文会报类似下面的错误: ERROR 1366: Incorrect string value: '\xE4\xB8\xAD\xE5 ...
- 【Other】Ubuntu 14.04 pptp 客户端连接配置
sudo apt-get install pptp-linux binutils modprobe ppp_mppe sudo pptpsetup --create testvpn --server ...
- android studio插件提升工作效率
SonarLint 代码质量管理插件 ButterKnife Zelezny ButterKnife 生成器,快速根据布局文件生成属性对象. SelectorChapek 设计师给我们提供好了各种资源 ...
- hdu2196
基本的树形dp,需要dfs三次,第一次求每个点最远的后代,第二次和第三次每个点的孩子分别从左到右和从右到左遍历. #include <cstdio> #include <vector ...
- Unity3D研究院之Prefab里面的Prefab关联问题(转)
转自http://www.xuanyusong.com/archives/3042 最近在做UI部分中遇到了这样的问题,就是Prefab里面预制了Prefab.可是在Unity里面一旦Prefab预制 ...