zoukankan      html  css  js  c++  java
  • MVC(1)

     MVC高级编程第四版小记

    1 捆绑系统可以使得脚本库不绑定到具体版本号,实现自动更新。

    bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                            "~/Scripts/jquery-{version}.js"));
     @Scripts.Render("~/bundles/jquery")

    2 HTML编码的用户输入 防止XSS 脚本攻击

    public string Browse(string genre)
    {
     string message=
     HttpUtility.HtmlEncode("Genre= "+genre);
    return message;//利用方法HttpUtility.HtmlEncode来预处理用户输入的值
    }

    3 MVC 根据默认路由{controller}/{action}/{id} 带有名为id的参数 不用加查询字符串参数也可以传参

    //Get:/Store/Details/5
    public string Details(int id)
    {
     string message="ID= "+id;
     return message;
    }

    4 视图本身不会被直接访问,浏览器不能直接指向一个试图渲染它。相反,视图总是被控制器渲染,因为控制器为它提供渲染的数据。

    5 ViewBag和ViewData ViewBag.Message属性传值 ViewData使用字典方式传值  ViewBag是ViewData的动态封装器  但二者语法不存在技术的差异  只是Message属性方式更被人们所接受。

    二者仍有关键差异。第一点,只有当要访问的关键字是一个有效的c#标识符,ViewBag才起作用。例如如果关键字View["  Bag"]带有空格或者特殊字符ViewBag就无法起作用,编译不会通过。

    第二点,动态值不能作为参数传递给扩展方法@Html.TextBox("name",ViewBag.Name) 这里就是动态的,要么使用ViewData 要么string(ViewBag.Name)变成具体类型。

    6 View中 强类型视图  

    Controller
    public ActoinResult List(){
    var albums=new List<Album>();
    for (int i=0;i<10;i++)
    {
      albums.Add(new Album{title=“Album”+i});
    }
    return View(albums);
    }
    
    View
    1.使用完全限定类型
    @model IEnumerable<MVCDemo.Models.Album>
    2.@using 声明
    @using MVCDemo.Models

    7 Model来进行数据传输  ViewBag用于显示主模型无关的数据 

    8 对于Razor只需要知道在插入代码时,输入Html和@符号 

    9 Razor可以智能的识别电子邮件的地址 @符合可以通过@@转义一个@进行打印    Razor可以使用圆括号()支持显示显式表达式   For Ex:  Ex是个字符串 要打印Ex.models 如果写@Ex.models会被识别打印Ex的属性,这时候加上@(Ex).models即可。 

    10 Razor定义字符串 代码块

    @{
    string name=“Jack”
    }

    11 Razor表达式是用HTML自动编码的。要想显示Html,使用@Html.Raw() 。 Html自动编码有效缓和XSS但是仍有存在JS中输入的风险,对JS中输入的值需要进行

    JavaScript字符串编码即@Ajax.JavaScriptStringEncode方法。如此就有效避免了XSS攻击。可以理解为对Html和JS进行编码防止攻击。

    12 @RenderBody占位符  标记使用这个布局的视图将渲染它们的主要内容的位置

    13 ViewStart 这个代码比任何视图先运行,统一配置布局页面。每个视图可以重写Layout属性的默认值。

    14 EF中的DbSet<T> 每一个T代表想要持久保存的对象。

    15 MVC模型绑定 简而言之 MVC尽可能,最大努力的的使用模型绑定器去查找和绑定所有的属性  路由数据 查询字符串 表单集合

    16 检查模型是否绑定成功 ModelState.IsValid 模型中还可以进行校验

    17 表单是包含输入元素的容器。action特性告知Web浏览器信息发往哪里,action就包含了一个URL。 method特性则告知浏览器是使用HTTP POST还是HTTP GET方法,默认使用POST提交。可以将路由写在action完成提交。

    18 Html辅助方法常用 @Html.BeginForm() @Html.TextBox() @Html.TextArea()  @Html.Label()  @Html.DropDownList() 等等

    19 Html.ActionLink 和Html.Route Link渲染一个超链接 

    @Html.ActionLink("Link Text","AnotherAction")//控制器相同
    @Html.ActionLink("Link Text","Index","OtherController")//另一个控制器
    @Html.RouteLink("Linek Text",new {action="AnotherActoin"})//与ActoinLink不同 RouteLink只可以接受路由名称。

    20 验证注解 

    常用的一些特性
    必须[Required]
    控制长度[StringLength(10,MinimumLength=3)]
    正则表达式[RegularExpresson]
    数值类型范围[Range(10,20)] 
    确保相同值[Compare("Email")]
    每个特性可以添加ErrorMessage

    21 显示和编辑注解

    设置友好的显示名称[Display(Name="First Name")]
    设置信息用途[Display(Name="Password")]

    22 要求SSL登录 SSL(Secure Sockets Layer 安全套接层) SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持 防止信息拦截 使用Https 特性[RequiredHttps]

    23 Html.AntiForgeryToken辅助方法 配合特性[ValidateAntiforgeryToken] 阻止CSRF跨站请求伪造

    24 使用HttpOnly阻止cookie盗窃  在web.config中设置<httpCookies domain=""  httponlyCookies="true" requireSSL="false">  或者对单个Cookie进行设置 属性HttpOnly=true Cookie不能跨不同的域名

    这个标记告诉浏览器除了服务器修改或设置cookie之外,其他操作均无效。

    25 重复提交威胁 恶意者添加不是表单数据中的字段进行攻击 使用特性[Bind]  Ex:[Bind(Include="Name")] 使用白名单指定允许绑定的字段

    26 开放重定向攻击 篡改URL定向都恶意的URL 使用RedirectToLocal函数防御  将Redirect(url)重定向方法变为RedirectToLocal(url) 该方法自写,最重要的是Url.IsLocalUrl进行验证

    private Actoin RedirectToLoacl(string returnUrl){
    if(Url.IsLocalUrl(returnUrl))
    {//(Url.IsLocalUrl参数验证
     return Redirect(returnUrl);
    }
    else
    {
    return RedirectToActoin("Index","Home");
    }
    }

    27 统一资源定位符URL 高质量:便于记忆和拼写且简短便于输入可反映站点结构等

    28 路由 将URL映射到对应的Action

    29  FormsAuthentication.SetAuthCookie(login.UserName, false); 此法记录身份票据并存储到Cookie 之后可用 特性[Authorize]过滤授权  特性[AllowAnonymous]允许匿名访问

    30 过滤器专用于MVC 常用的就是授权和Https场景  种类分为 授权 资源 Acton 异常 Result

    资源过滤器根据用户请求的地址,查找对应的缓存,如果找到缓存,则返回结果 ,如果没找到就添加执行动作。

    Acton和Result过滤分别是指执行前和执行后进行过滤的

    异常过滤器:当项目中出现异常时,就会自动执行异常过滤器中的代码。先添加一个类。

    31 MVC的内容大概就这么多基础 关于角色管理部分 是MVC结合Identity 根据不同的用户进行用户的管理和角色的管理。 

  • 相关阅读:
    String分割成int[]和List<Integer>
    linux查询正在运行的jar包并kill进程
    linux自动清理n天(1个月)前日志文件
    zookeeper命令行操作
    sql开窗函数
    hdfs shell操作
    centos7安装mysql8
    hadoop集群安装
    hdfs基本介绍
    IDEA下运行MAVEN项目,报"程序包******不存在"
  • 原文地址:https://www.cnblogs.com/cdjbolg/p/12467642.html
Copyright © 2011-2022 走看看