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.重新使用外部项目保存区域控制器

最新文章

  1. Java-加载数据库驱动,取得数据库连接
  2. 使用gulp解决外部编辑器修改Eclipse文件延迟更新的问题
  3. [jQuery学习系列五 ]5-Jquery学习五-表单验证
  4. C# winform 中MessageBox用法大全(附效果图) (转载+说明)
  5. HookIAT的启动程序
  6. html+CSS--水平居中设置(定宽块状元素)
  7. 使用mp4v2将H264+AAC合成mp4文件
  8. ecshop在PHP 5.4以上版本各种错误问题处理
  9. 网站开发常用jQuery插件总结(五)滚动条插件nanoscroller
  10. statspack系列8
  11. ZOJ 3430 Detect the Virus 【AC自动机+解码】
  12. IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理
  13. 20162318 实验三《 敏捷开发与XP实践》实验报告
  14. [LeetCode] Max Area of Island 岛的最大面积
  15. Tomcat关闭日志输出
  16. 【js】js中判断对数是否为空
  17. SQL Server实际执行计划COST&quot;欺骗&quot;案例
  18. Python第7天
  19. Redis(2)---数据持久化
  20. [P3768]简单的数学题

热门文章

  1. oracle、mysql、db2三大数据库分页方法的整理
  2. mac下php添加openssl扩展
  3. C/C++ string.h头文件小结
  4. 手脱nSPack 3.7
  5. 微信小程序,页面分享
  6. git查看/修改 用户名和邮箱
  7. 封装-python
  8. UVA 1390 Interconnect
  9. 导出数据excel表--身份证号后三位是0--〉还原
  10. JavaScript 核心