21、ASP.NET MVC入门到精通——ASP.NET MVC4优化

比如系列目录:ASP.NET
MVC4适合帮派及精通系列目录汇总

去无用的视图引擎

默认情况下,ASP.NET MVCE同时支持WebForm和Razor引擎,而我辈便在同一个品类中单单所以到了一样栽视图引擎,如Razor,那么,我们尽管好移除掉没有应用的视图引擎,提高View视图的查找效率。在无去除WebForm引擎之前,检索控制器中不在的视图时,我们好自生图看,检索视图的顺序是先Home目录下面,然后Shared目录下面的aspx、ascx文件。

1、在Global.asax中上加如下代码:

void RemoveWebFormEngines()
        {
            var viewEngines = ViewEngines.Engines;
            var webFormEngines = viewEngines.OfType<WebFormViewEngine>().FirstOrDefault();
            if (webFormEngines != null)
            {
                viewEngines.Remove(webFormEngines);
            }
        }

 protected void Application_Start()
        {
            RemoveWebFormEngines(); //移除WebForm视图引擎
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();
        }

今日重拘留下

减少合并Css和Js

在APS.NET
MVC4中,App_Start文件夹下面多了一个BundleConfig.cs类,专门用来压缩合并文件之,默认情况下压缩合并功能是翻开之,当然我们为得以应用 BundleTable.EnableOptimizations
= true;来显示设置开启。

然而,注意要在Web.config中拿 调试设置为false,压缩才见面生效 
<compilation debug=”false” targetFramework=”4.5″ />

 bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery.min.js", "~/Scripts/jquery.easyui.min.js"));// "~/Scripts/jquery-{version}.js",
 bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/themes/default/easyui.css", "~/Content/themes/icon.css"));//"~/Content/site.css",

咱俩来拘禁下压缩合并前与削减合并后底相比

减去合并前:

压缩合并后

 

怪肯定,我们见到文件于合了,减少了网络要数,同时,文件之大大小小为削弱多少了,说明为抽处理了。

小心:我们不得不合并同一档的文本,也就是说不可知拿js和css文件合并及一块儿,只能单独合并js文件和css文件。

用防伪造令牌来避免CSRF攻击

对发挥提交来说,要关心的便是平安问题。ASP.NET
MVC提供了探测某种攻击型的机制,其中同样种方法就是是防伪造令牌。这种令牌包含服务器端和客户端组件,代码会以表单中插一个隐藏域以保留用户特定的令牌 @Html.AntiForgeryToken()

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
    @Html.AntiForgeryToken()

瞩目:@Html.AntiForgeryToken()只能上加于Html.BeginForm()形式表明的表单中,纯HTML的<form>标签表单是甚的。

Html.AntiForgeryToken辅助方法会写副一个加密了之数码及用户端浏览器的Cookie里,然后在表单内插入一个曰也_RequestVerificationToken的隐藏字段,该隐藏字段的情,每次刷新页面都见面无等同,每次执行Action动作方法时,都见面于这个隐藏字段的价值和Cookie的加密数据开展验证比对,符合验证才允许实施这Action方法。

又劳动器端会事先在数量处理之前实施这些令牌验证代码,如下:[ValidateAntiForgeryToken]

        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
            {
                return RedirectToLocal(returnUrl);
            }

            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            ModelState.AddModelError("", "提供的用户名或密码不正确。");
            return View(model);
        }

 隐藏ASP.NET MVC版本

默认情况下,ASP.NET MVC网站会把版本号提供于浏览器,

在Global.asax中添加   MvcHandler.DisableMvcResponseHeader = true;

        protected void Application_Start()
        {
            MvcHandler.DisableMvcResponseHeader = true;
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

判定客户端请求是否为Ajax:Request.IsAjaxRequest

相关文章