@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上顯示的東西,能增強安全性(反正微軟是這麼說的),弊端就是無論用哪一個,都需要程序員認真檢查一下編譯之後的東西,否則會很鬧心

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