开发者社区> 技术mix呢> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介:
+关注继续查看

本系列目录:ASP.NET MVC4入门到精通系列目录汇总

删除无用的视图引擎

默认情况下,ASP.NET MVCE同时支持WebFormRazor引擎,而我们通常在同一个项目中只用到了一种视图引擎,如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


本文转自邹琼俊博客园博客,原文链接:http://www.cnblogs.com/jiekzou/p/5024735.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Asp.net Mvc Framework 十(测试方法及Filter的示例)
示例下载:http://files.cnblogs.com/chsword/MyTestMvc.rar 顺遍说一下建立测试的方法 本身Asp.netMvc是提供有测试功能的 在新建Asp.netMVCApplication时,点击确定,会跳出一个Create Project Test的询问 如果选Yes就自动建立一个 "工程名+Test"的测试工程 测试工程要引用Rhino.
604 0
Asp.net Mvc Framework 九 (View与Controller交互)
这一回为避免写第八节时那种情况再次出现,我改用Wps写了,如果复制过去格式有问题讲大家见谅 --邹健 本节所有示例都是讲解登录提交表单的过程 为了本课能更好讲解我们先建立一个账号的Model namespace  MvcApplication4.
661 0
Asp.net Mvc Framework 七 (Filter及其执行顺序)
应用于Action的Filter 在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能判断登录与否或用户权限,决策输出缓存,防盗链,防蜘蛛,本地化设置,实现动态Action filter是一种声明式编程方式,在Asp.
800 0
Asp.net Mvc Framework 二 (URL Routing初解)
什么是URLRouting呢? 你可以使用URL routing来配置一些URL的映射,使用户可以按你的规则来访问网站. 使用URL routing,一定要规定URL模式,它包括一个位置标识,它将在你请求网页时按这个规则返回给你内容.
790 0
Asp.net Mvc Framework 一 (安装并建立示例程序)
Asp.net Mvc 是微软官方提供的Mvc模式编写Asp.netWeb应用程序的一个框架,它由Castle的MonoRail而来.目前已经历经数个版本 官方网站:http://www.asp.net/mvc/ 同时,asp.
764 0
+关注
2968
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载