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 根据不同的用户进行用户的管理和角色的管理。 

posted @ 2020-03-12 10:48  最爱吃汤圆27  阅读(136)  评论(0编辑  收藏  举报