ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解
原文?ASP.NET MVC 5 學習教程:Details 和 Delete 方法詳解
在教程的這一部分,我們將研究一下自動生成的 Details 和Delete 方法。
Details 方法
打開Movie控制器,找到Details方法。
// // GET: /Movies/Details/5 public ActionResult Details(Int32 id) {Movie movie = db.Movies.Find(id);if (movie == null){return HttpNotFound();}return View(movie); }Code First 通過使用Find方法找到要顯示的Movie對象。如果movie對象為null,則返回HttpNotFound(),這個判斷非常有必要,試想如果有黑客要攻擊你的網站,他們可能將通過修改URL來嘗試訪問你的網站,例如將http://localhost:xxxx/Movies/Details/1 修改為http://localhost:xxxx/Movies/Details/12345 。如果你不去驗證movie是否為空,則會將數據庫錯誤返回給黑客,這樣會暴漏網站的更多信息。
Delete 和 DeleteConfirm 方法
// // GET: /Movies/Delete/5 public ActionResult Delete(Int32 id) {Movie movie = db.Movies.Find(id);if (movie == null){return HttpNotFound();}return View(movie); }// // POST: /Movies/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(Int32 id) {Movie movie = db.Movies.Find(id);db.Movies.Remove(movie);db.SaveChanges();return RedirectToAction("Index"); }第一個Delete方法并沒有刪除Movie,而是返回了可以刪除確認頁面,在確認頁面中,會創建HttpPost請求,完成Movie的刪除。直接使用HttpGet 請求來刪除Movie會打開一個安全漏洞。
真正刪除數據的方法名字是 DeleteConfirmed。下面是兩個方法的定義:
public ActionResult Delete(Int32 id)[HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(Int32 id)CLR對于重構的方法,要求方法名相同,但參數不同。然而,我們在這里用到的兩個刪除方法,他們都接收一個整形的參數,如果方法名也形同,那么就構成語法錯誤了。
為了解決這個問題,有以下幾種解決辦法:
第一種辦法是使用不同的方法名。這也是ASP.NET MVC 5 支架所采用的方法。然而,使用這種方法還有一些小問題:ASP.NET 通過地址段來映射方法名,如果將方法重命名,路由通常會找不到方法,解決的辦法已經在上面的例子中了,我們可以為DeleteConfirmed方法添加 特性ActionName("Delete")。這樣一來,當URL中包含Delete 的POST請求都會被分配給方法DeleteConfirmed。
另外一種常用解決的方法是使用相同的名字,然后為POST 方法添加一個未使用的參數。例如,一些開發者會添加FormCollection類型的參數傳遞給POST方法,然后不使用這個參數:
public ActionResult Delete(FormCollection fcNotUsed, int id = 0) {Movie movie = db.Movies.Find(id);if (movie == null){return HttpNotFound();}db.Movies.Remove(movie);db.SaveChanges();return RedirectToAction("Index"); }?
總結
現在你已經擁有了一個完整的ASP.NET MVC 5 應用程序,你可以使用LocalDB來存儲數據,可以新建、編輯、查找、刪除 Movie數據。本教程就介紹到這里,起飛網將繼續翻譯更多ASP.NET MVC 教程及其它技術文章,期待您的關注!
posted on 2013-12-10 21:08 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/lonelyxmas/p/3468190.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sqlserver 分页存储过程
- 下一篇: 关于Java中try-catch-fin