1.避免重复提交:Post-Redirect-Get
post修改数据,Get显示数据
2.HtmlHelper跨项目复用(最通用),PartialView复用Html模版,ChildAction复用Html模版和业务逻辑(项目内),纯Html描绘页面
3.具有逻辑关系的数据封装成ViewModel,零散的数据用ViewBag;View中的静态数据(用户无法影响的数据)的获取过程放在View中(高内聚)
4.根据生命周期,合理使用 Application(应用),Session(会话),TempData(Action跳转),ViewBag(当前页面)
5.配置都写在web.config中,在SysContext中读取;用户信息存到Session中,在BaseController中用属性读取(或自定义模型绑定,在需要的Action上加对应参数);
6.请求参数重复出现的场合,使用CustomModelBinder
7.Filter提供了4类时间点,把合适的工作放在正确的时间点上;如果所有Action都要使用该时间点,可以在BaseController中重写实现
(Authorize时,Action前后,View前后,Exception时)
8.在Application_Start()中指定一种模版引擎
9.对静态页面和准静态页面使用缓存OutputCache
10.针对长运行请求,使用异步Controller
11.针对大页面,使用GZip压缩
12.用AjaxMin合并压缩js、css,用Sprite合并image
13.合理使用Ajax
14.预防跨站脚本攻击XSS
a.输入端:默认不接收Html,[AllowHtml]仅用在需要接收Html的Action上
b.输出端:默认对变量HtmlEncode,@Html.Raw()仅用在非用户输入的变量上
c.确实要将输入原样呈现在输出端:@Html.Raw(Ajax.JavaScriptStringEncode(输入))
15.预防Session劫持
给Cookie设置HttpOnly=true,只允许传输,不允许js操作
16.预防跨站请求伪造
表单中加标记:@Html.AntiForgeryToken
表单提交验证:[ValidateAntiForgeryToken]
17.预防SQL注入
a.使用参数化Sql查询
b.使用ORM
18.预防编码漏统
a.屏蔽方法:控制器中的非Action方法,使用private屏蔽
b.过滤输入:模型绑定时排出不需要的字段,Bind[Exclude=("字段1,字段2")]