天天看點

ASP.NET MVC 5 學習教程:Details 和 Delete 方法詳解

在教程的這一部分,我們将研究一下自動生成的 Details 和Delete 方法。

打開Movie控制器,找到Details方法。

Code First 通過使用Find方法找到要顯示的Movie對象。如果movie對象為null,則傳回HttpNotFound(),這個判斷非常有必要,試想如果有黑客要攻擊你的網站,他們可能将通過修改URL來嘗試通路你的網站,例如将http://localhost:xxxx/Movies/Details/1 修改為http://localhost:xxxx/Movies/Details/12345 。如果你不去驗證movie是否為空,則會将資料庫錯誤傳回給黑客,這樣會暴漏網站的更多資訊。

第一個Delete方法并沒有删除Movie,而是傳回了可以删除确認頁面,在确認頁面中,會建立HttpPost請求,完成Movie的删除。直接使用HttpGet 請求來删除Movie會打開一個安全漏洞。

真正删除資料的方法名字是 DeleteConfirmed。下面是兩個方法的定義:

CLR對于重構的方法,要求方法名相同,但參數不同。然而,我們在這裡用到的兩個删除方法,他們都接收一個整形的參數,如果方法名也形同,那麼就構成文法錯誤了。

為了解決這個問題,有以下幾種解決辦法:

第一種辦法是使用不同的方法名。這也是ASP.NET MVC 5 支架所采用的方法。然而,使用這種方法還有一些小問題:ASP.NET 通過位址段來映射方法名,如果将方法重命名,路由通常會找不到方法,解決的辦法已經在上面的例子中了,我們可以為DeleteConfirmed方法添加 特性ActionName("Delete")。這樣一來,當URL中包含Delete 的POST請求都會被配置設定給方法DeleteConfirmed。

另外一種常用解決的方法是使用相同的名字,然後為POST 方法添加一個未使用的參數。例如,一些開發者會添加FormCollection類型的參數傳遞給POST方法,然後不使用這個參數:

現在你已經擁有了一個完整的ASP.NET MVC 5 應用程式,你可以使用LocalDB來存儲資料,可以建立、編輯、查找、删除 Movie資料。本教程就介紹到這裡,起飛網将繼續翻譯更多ASP.NET MVC 教程及其它技術文章,期待您的關注!