@Html内的函数解析。(一)

ActionLink

@Html.ActionLink("生成一个a标记", "Two", new { id = 1 }, new { @class = "class" })
ActionLink 函数可以生成一个<a><a/>标记
第一个参数为:<a>生成一个a标记<a/>
第二个参数为:<a href="Two">生成一个a标记<a/>
第三个参数为:<a href="Two?id=1">生成一个a标记<a/>
第四个参数为:<a href="Two?id=1" class="class">生成一个a标记<a/>

AntiForgeryToken

页面代码:

    @using (Html.BeginForm("Two", "Default", new { id=1}, FormMethod.Post, null))
    {

        @Html.AntiForgeryToken()
        <input id="Submit1" type="submit" value="提交" />
    }

Controller中代码:

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Two(int id)
        {
            ViewBag.Title = "Post提交的Two";
            return View();
        }

用了AntiForgeryToken的提交方式,可以避免CSRF/XSRF攻击(这里就不详细说明了,以后会写的),前提是必须要用post提交方式(提交过去的时候无论传过去的是string还是int都能跳转,不知道为什么。网上看见有用jQuery写的,试了一下不知道为什么不好使。)

AttributeEncode和Encode

    @Html.AttributeEncode("a b")
    @Html.Encode("c d")

先来看一下微软官方给的注释:

AttributeEncode:

AntiForgeryToken 方法会将引号 (“)、与号 (&) 和左尖括号 (<) 转换为等效的字符实体。
结果应只用于双引号中的特性。 如果使用 AntiForgeryToken 方法对单引号中的特性进行编码,则可能会出现安全问题。

Encode:

如果将空格和标点符号等字符传入 HTTP 流中,则可能会在处理这些字符时错误地解释这些字符。 URL 编码会将 URL 中不允许的字符转换成字符实体等效项。 例如,当字符 < 和 > 嵌入到要在 URL 中传输的文本块中时,这两个字符将编码为 %3c 和 %3e。

上面是微软给的注意事项,我感觉这就是一个把object或string类型的数据转换为在html上显示的东西,能增强安全性(反正微软是这么说的),弊端就是无论用哪一个,都需要程序员认真检查一下编译之后的东西,否则会很闹心

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章