《Pro ASP.NET MVC 3 Framework》学习笔记之二十一【Area及URL架构的最佳实践】

简介:

使用Areas

MVC框架支持在areas(区域)里面组织一个web应用程序,每一个area呈现应用程序的一个功能段,比如管理,订单,客户支持等等。这对于一个大的项目是非常有用的,因为将所有的controller,model,view都只是放在一套文件夹里面(整个项目所有的Controller都在一个文件夹下)会非常难管理的。这时area就非常有用了,每一个area都有自己的一套文件结构,如Controller,View,Model,通过area就可以保持相对的分离。这样做可以让程序的每一个功能块划分的更加明确,当有很多的开发人员合作开发时也可以避免相互冲突。

下面会创建一个实例来说明Area的作用:
首先创建一个WorkingWithAreas项目使用Internet Application模版,接着创建一个名为Admin的Area。

完成以后,我们会发现Area里面其实是一个mini版的MVC项目,在Area目录下生成了一个类AdminAreaRegistration,这个类里面一个非常有意思的方法是RegisterArea,在这个方法里面藉着URL模式注册了一个路由,当然其他的路由也是在这里定义。如果你要给route传递一个名字而不是用null,那么route的名字必须是全局唯一的,不仅仅在该Area内唯一。我们不需要做其他的操作来确保该注册方法被调用,系统自动添加到了 Global.asax.cs里面的Application_Start方法里面,如:AreaRegistration.RegisterAllAreas();当调用这个的时候会让MVC框架遍历我们应用程序的所有类,并找出从AreaRegistration类派生的类,然后调用这些类里面的RegisterArea方法。

注意:不要改变在Application_Start方法里面与route有关的语句的顺序。如果我们在调用AreaRegistration.RegisterAllAreas方法之前,先去调用了RegisterRoutes方法,那么我们的route也要定义在area routes之前。假设routes是按照顺序被评估或匹配,这就意味着在对area里面的controller进行请求时可能会匹配到错误的路由。

AdminAreaRegistration类里面的public override void RegisterArea(AreaRegistrationContext context)方法有一个AreaRegistrationContext类型的参数,这个参数暴露了一套MapRoute方法来让我们在Area里面使用,跟我们在Global.asax.cs里面的RegisterRoutes方法里面使用MapRoute一样。这个有点像我们在ashx里面使用Response是通过HttpContext对象来调用的,上下文对象一般都是这样的作用(个人理解)。在AreaRegistrationContext类里面的MapRoute方法自动限制了route注册的包含Area Controller的命名空间。这也意味着当我们在area里面创建一个controller时,必须在默认的命名空间里面。否则路由系统会找不到它。

接着我们在area里创建一个controller——HomeController,接着再创建一个View。然后可以运行我们的程序


报错是因为MVC不知道选择哪个controller(HomeController有两个:一个在Area里面,一个在外面),解决的方法前面的笔记里面有提到的,如下:

复制代码
        public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

}
复制代码

在Area里面创建链接时跟前面创建时一样,并没有什么特别的步骤。MVC框架会探测与一个实际的Area的相关的请求,然后会在仅仅为该Area定义的routes中找到一个匹配的来创建输出的链接。

例如:@Html.ActionLink("Click me", "About"),在页面呈现的链接是:<a href="/Admin/Home/About">Click me</a> 
如果链接指向的是其他Area里面或者是Area外面的controller里面的一个action方法,我们必须指定Area的名字,如下:

@Html.ActionLink("Click me to go to another area", "Index", new { area = "Support" })
呈现为:<a href="/Support/Home">Click me to go to another area</a>

如果我们要创建一个链接,action是不是在Area里面而是在根目录下的,这时可以这样:

@Html.ActionLink("Click me to go to another area", "Index", new { area = "" })

URL架构最佳实践

上面讲了很多关于URL的结构,近年来,对应应用程序URL的设计越来越来受到重视,有一些比较重要的设计严则出现。如果我们遵循这些严则,将会改善应用程序的可用性,兼容性,已经搜索引擎的排名。这些严则如下:

1.让我们的URL干净并且友好。

http://www.amazon.com/Pro-ASP-NET-MVC-3-Framework/dp/1430234040/ref=sr_1_13?s=books&ie=UTF8&qid=1294771153&sr=1-13将这样的URL变成如下:http://www.amazon.com/books/pro-aspnet-mvc3-framework是不是会好很多。

下面是关于URL友好的一些指南:

1)设计URL来描述它的内容而不是实现细节。使用"/Articles/AnnualReport"代替"/Website_v2/CachedContentServer/FromCache/AnnualReport"

2)使用内容标题胜过ID。使用"/Articles/AnnualReport"代替"/Articles/2392",当然如果是必须用的情况可以两个结合,如/Articles/2392/AnnualReport,这个会比单纯用ID输入更多的字符,但是这样有助于搜索引擎的排名。

3)不要使用针对HTML的文件扩展名,如:.aspx or.mvc。但是可以使用特殊的文件类型如:.jpg,  .pdf, and  .zip。虽然当我们设置合适的MIME类型时,浏览器不会关心文件扩展名,但是人们倾向于PDF文件的扩展名就是.pdf

4)具有层次。如:/Products/Menswear/Shirts/Red。这样访问的人很容易猜到父级的链接。

5)大小写不敏感。asp.net路由系统默认就是这样。

6)避免符号,编码,字符序列。如果我们希望一个单词分开,可以使用“—”如: /my-great-article。下划线是不友好的,URL会编码空格成为奇怪的字符,如“/my+great+article”或是令人讨厌的如“/my%20great%20article”

7)不要改变URL。因为这样做等于丢掉了业务,当我们改变URL时要尽可能的通过301重定向支持过去旧的URL架构。

8)保持一致性。整个应用程序只使用一种URL格式。

2.正确的选择GET和POST

总的原则就是:GET请求应该针对只读的信息检索,POST请求应该任何可能改变应用程序状态的操作。
在标准的承诺条款中:GET针对安全的交互,POST针对不安全的交互。这些约定是W3C制定的。
GET请求是可寻址的——所有的信息包含在URL中,所以这可能使书签或链接指向这些地址。

好了,今天的笔记就到这里。关于URL和路由的这章笔记到这里就结束了。
晚安!

本文转自Rt-张雪飞博客园博客,原文链接http://www.cnblogs.com/mszhangxuefei/archive/2012/02/26/mvcnotes_21.html如需转载请自行联系原作者


张雪飞

相关文章
|
1月前
|
监控 安全 Apache
构建安全的URL重定向策略:确保从Web到App平滑过渡的最佳实践
【10月更文挑战第2天】URL重定向是Web开发中常见的操作,它允许服务器根据请求的URL将用户重定向到另一个URL。然而,如果重定向过程没有得到妥善处理,可能会导致安全漏洞,如开放重定向攻击。因此,确保重定向过程的安全性至关重要。
58 0
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
38 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
54 0
|
3月前
|
数据采集 开发框架 .NET
HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求
在现代Web开发中,高效可靠的HTTP请求对应用性能至关重要。ASP.NET Core提供的`HttpClient`是进行这类请求的强大工具。本文探讨其最佳实践,包括全局复用`HttpClient`实例以避免性能问题,通过依赖注入配置预设头部信息;使用代理IP以防IP被限制;设置合理的`User-Agent`和`Cookie`来模拟真实用户行为,提高请求成功率。通过这些策略,可显著增强爬虫或应用的稳定性和效率。
HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
46 0
|
3月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
3月前
|
开发框架 前端开发 .NET
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
|
3月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
119 0
|
6月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
78 0
|
6月前
|
域名解析 缓存 网络协议
【计算机网络基础篇】学习笔记系列之二《游览器输入URL后发生了什么?》
【计算机网络基础篇】学习笔记系列之二《游览器输入URL后发生了什么?》
110 3
下一篇
无影云桌面