MVC 最佳实践

规范

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")]



你可能感兴趣的:(Web前端开发)