咱們再來看看自動生成的Details 和Delete methods.web
MoviesController中的Details方法:數據庫
public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest); } Movie movie = db.Movies.Find(id); if (movie == null) { return HttpNotFound(); } return View(movie); }
MVC架構引擎(scaffolding engine)建立的action method會在HTTP請求的時候被調用。上面的這個方法在GET請求的時候被調用,URL中會包含三個參數(segments):Movies Controller,Details Method,ID Value.windows
Code First 用Find Method把搜索變得更加簡單。Detail方法中包含一個很重要的安全特性:在沒有找到具體的movie實例前,代碼不會進行任何的處理。瀏覽器
例如,若是hacker直接在把瀏覽器的地址直接由 http://localhost:xxxx/Movies/Details/1更改成http://localhost:xxxx/Movies/Details/1234 這個若是沒有檢查ID對應的Movie實例是否存在,頁面就會報出一個database error安全
MoviesController中的Delete和DeleteConfirme方法:架構
// // GET: /Movies/Delete/5 public ActionResult Delete(int id = 0) { Movie movie = db.Movies.Find(id); if (movie == null) { return HttpNotFound(); } return View(movie); } // // POST: /Movies/Delete/5 [HttpPost, ActionName("Delete")] public ActionResult DeleteConfirmed(int id) { Movie movie = db.Movies.Find(id); db.Movies.Remove(movie); db.SaveChanges(); return RedirectToAction("Index"); }
咱們以前也有講到過的,若是ActionResult Method 前不加前綴就默認爲GET請求執行的方法,這個方法不會更新數據庫的數據,只是返回所查詢的數據。咱們點擊「Delete」鏈接的時候(http://localhost:9898/movies/Delete/1),會調用Delete方法查詢到對應Id的數據,而後反饋到頁面中。咱們再次點擊下面的Delete按鈕就會提交一個HTTP POST請求,調用ActionDelete方法。mvc
咱們如今看一下,Delete方法和DeleteConfirm方法的區別:asp.net
CLR(common language runtime)請求加載方法的時候,會根據惟一的(unique)方法名和參數調用相應的方法。可是在這裏,咱們須要兩個Delete methods,一個處理GET請求一個處理POST請求,這兩個方法又有相同的參數。spa
爲了這兩個Delete方法區分開來,一個解決方法是給這兩個方法不一樣的名字,把POST請求須要調用的Delete方法從新命名爲DeleteConfirme.可是這樣的話,更具默認路由,Delete的URL(http://localhost:9898/movies/Delete/1)請求也就只能調用GET 的 Delete Method,沒法調用重命名的DeleteConfrime Method。爲了解決這個問題,咱們只須要在DeleteConfirme前加上ActionName("Delete")
attribute就能夠了。.net
小總結:
上面的這些咱們已經創建了一個簡單的CRUD的MVC Application。下一步咱們應該把這個網址發佈。Microsoft 給咱們免費的web hosting 能夠掛10個websites.