某些安全性較高的網頁,如網上支付或用戶登錄頁面,可能會使用到https(SSL/TLS)來提升安全性。本文介紹瞭如何在ASP.NET MVC中強制某action使用https和如何進行向https頁面的跳轉。
咱們先實現強制一個action使用https。這裏寫了一個RequireHttpsAttribute,它的做用是將非https鏈接轉換成https鏈接,這樣全部使用了RequireHttps這個filter的controller都會強制使用https鏈接。
web
因爲https和https服務使用不一樣的端口號,並且https不能綁定主機頭,只能經過不一樣端口的方式來區分各個站點,因此這裏將host和port信息寫到了web.config裏,以方便配置。在web.config的appsettings節加入以下信息便可
安全
HttpsPort能夠不寫,將使用默認的443。
而後在要使用https鏈接的controller或action前加上[RequireHttps],如
app
這樣,當咱們用http://localhost/Home/About訪問該頁面時會自動跳到https://localhost/Home/About。可是這樣還有一個問題,網頁中的連接都是http的,當點擊進入須要使用https鏈接的網頁時都要進行一次Redirect。因此咱們要將網頁中的連接也改爲https。這步不難,只須要將view中全部連接到https頁面的Html.Action()使用適當的重載方法來寫便可。ASP.NET MVC 1.0 RTM中提供了2種重載能夠將protocol設置爲https。在新建ASP.NET MVC Web Application後默認生成的站點中,shared文件夾下有site.master文件中有個指向/Home/About的ActionLink。原來是
ide
咱們對其進行改寫
優化
這樣,生成出來的連接就是https的了,點擊之後直接會使用https鏈接而無需再進行一次Redirect,以後新的要到https頁面的連接也可仿照次寫法。
這裏又要用到hostName信息,咱們以前已經將它寫在web.config裏了,因此能夠專門寫一個方法來獲取web.config中的這部分信息並拼接成這裏須要的hostName字符串,或者還能夠對HtmlHelper寫一個擴展方法專門用於處理https的連接,這些能夠在實際使用時作適當的優化。
示例代碼下載ui