博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC TIP2:路由
阅读量:7009 次
发布时间:2019-06-28

本文共 2111 字,大约阅读时间需要 7 分钟。

1:简单路由

建立MVC的时候会给我们创建默认的路由,如下:

routes.MapRoute(
    
"Default"
,
// Route name
    
"{controller}/{action}/{id}"
,
// URL with parameters
    
new 
{ controller =
"Home"
, action =
"Index"
, id = UrlParameter.Optional }
// Parameter defaults
);

表示假设你在浏览器的地址栏输入了下面的URL:

/Home/Index/3

默认的路由将这个URL映射为下面的参数:

Controller = Home

Action = Index

id = 3

当你请求URL /Home/Index/3时,将会执行下面的代码:

HomeController.Index(3)

Default路由包含了所有三个参数的默认值。如果你不提供控制器,那么控制器参数默认值为Home。如果你不提供动作,动作参数默认为值Index。最后,如果你不提供id,id参数默认为空字符串。

2:创建一个自定义路由

routes.MapRoute(
    
"RouteTemp"
,
// Route name
    
"Archive/{entryDate}"
// URL with parameters
    
new 
{ controller =
"Archive"
, action =
"Entry" 
}
// Parameter defaults
);

上面的代码意味着我们让路由匹配到这样的URL。

3:下面是设计URL路由的原则

3.1 建立简单清晰的URL

在WEB-FORM中可能得到这样的URL:

events_by_month.aspx/year=2008&month=4

这样的URL没有如下的URL好:

events/2008/04

这也叫永久URL,同样,这也标识了我们可以为路由动作建立多个参数。

3.2 建立可编程的URL

events/2008/04

这表示删除04,能够得到2008年的所有记录是合理的。

3.3 允许URL参数冲突

应该能同时允许

events/2008/04

events/someeventsname

3.4 避免暴露数据库ID

events/17

这样的URL可能暴露了数据库ID,应该做简单的处理,如

events/ID17

这也会比第一个URL要好。

3.5 考虑SEO

可以在路由中加入关键字,如

events/ID17/MVC

3.6 提供CATCH ALL路由

必须为所有未匹配的路由添加的控制器,如下:

routes.MapRoute(
    
"catch-all"
,
    
"{*catchall}"
,
    
new 
{ controller =
"Error"
, action =
"NotFound" 
}
);

经过上面的处理,所有未处理的URL,都会交给ErrorController的NotFound处理,如下:

public 
class 
ErrorController : Controller
{
    
public 
string 
NotFound()
    
{
        
return 
"not found!"
;
    
}
}

3.7 注意路由的次序

路由匹配有先后次序,在3.6中,我们会发现,如果输入,结果IE显示:

查看我们的路由设置:

发现,因为URL,被路由Default路由走了。将这个默认的路由去掉,一切就OK了。

4:路由约束

有的时候,我们需要,如下的URL

被路由到一个处理ID的控制器,而

则被路由到一个处理商品名称的控制器,这就需要我们建立路由约束。如下:

routes.MapRoute(
    
"Product"
,
    
"Product/{productId}"
,
    
new 
{ controller =
"Product"
, action =
"Details" 
},
    
new 
{ productId =
@"\d+" 
}
 
);
routes.MapRoute(
    
"Product2"
,
    
"Product/{entryArg}"
,
    
new 
{ controller =
"Archive"
, action =
"Entry" 
}
 
);

可以看到,前者我们路由到控制器ProductController,而后者则路由到了ArchiveController。

再次强调一遍,在整个项目开始以前,设计好路由是很重要的一个环节。

注意,可以使用实现IRouteConstraint接口来创建自定义路由约束,但是更建议使用像上面这样的正则匹配。

5:Views和Controllers文件夹

这两个文件夹已经成为MVC的默认文件夹,如果我们想创建页面不受MVC控制,则需要新建另外的文件夹。

本文转自最课程陆敏技博客园博客,原文链接:http://www.cnblogs.com/luminji/archive/2011/07/27/2118649.html,如需转载请自行联系原作者

你可能感兴趣的文章
〔池化纲领〕也及链表
查看>>
黑马程序员-蓝桥杯110问题练习
查看>>
AtCoder Beginner Contest 127 解题报告
查看>>
最大流EK算法
查看>>
在nuxt中引入Font Awesome字体图标库
查看>>
sql trace script
查看>>
程序员,请不要抢系统管理员的饭碗
查看>>
VCS双机由于ID冲突导致启动失败
查看>>
Windows 8上安装本地回环网卡
查看>>
修改计算机名的注意事项
查看>>
PowerBI从Exchange跟踪日志中分析数据和KPI展现
查看>>
你能成为什么样的人,取决于你心中的那颗种子!
查看>>
接口自动化测试系列之PHPUnit介绍和环境搭建
查看>>
通过ssl调用远程WebService
查看>>
SQL Server 何时将“脏页”回写到硬盘
查看>>
笔记本电脑的选购之一(2011年10月)
查看>>
电子商务时代必知的PKI及HTTPS
查看>>
程序员教你如何追女生
查看>>
各种测试用例简要模板
查看>>
SCCM 2007 R2部署、操作详解系列之概念篇一:SCCM功能详解
查看>>