2008-09-23 63 views
7

開發者通常遵循的具體模式是什麼?在我的web應用程序中,我從來沒有真正地考慮過它,但ASP.NET MVC路由引擎幾乎迫使您至少考慮它。到目前爲止,我已經喜歡控制器/動作/索引結構(例如Products/Edit/1),但是我正在爲更復雜的網址而苦苦掙扎。你如何構建你的URL路線?

例如,假設您有一個頁面列出了用戶在其帳戶中擁有的所有產品。你會怎麼做?關閉我的頭頂,我能想到的的列表頁面下面的可能性和編輯頁面:

  1. 用戶/ {用戶ID} /產品/列表,用戶/ {用戶ID} /產品/編輯/ {product id}
  2. User/{user id}/Products,User/{user id}/Products/{product id}
  3. Products?UserID = {user id},Products/Edit/{product id}

我敢肯定還有很多其他的我失蹤了。有什麼建議?

回答

7

我喜歡RESTful,用戶友好和可破解的URL。

這是什麼意思?讓我們從用戶友好的網址開始。對我而言,用戶友好的URL很容易輸入,並且易於記憶。/Default.aspx?action=show&userID=140不符合任何這些要求。像`/ users/troethom'這樣的URL似乎是合乎邏輯的。

這導致下一點。 A 可破解的URL是用戶可以修改的網址,並且仍然會顯示結果。如果URL是可破解的,並且我的配置文件的URL是/users/troethom,那麼刪除我的用戶名以獲取用戶列表將是安全的(/users)。

使用REST風格的網址與我其他建議背後的想法非常相似。您正在爲用戶設計網址,而不是爲機器設計網址,因此網址必須與內容相關,而不是網站的技術後端。作爲'/ users'的URL比'/ users/list'更有意義,URL'/ category/programming/javascript'(表示'編程'類別中的子類別'javascript')優於'/ category/show/12'。

這的確是比較難省略ID,但在我的世界裏它是值得的。

上W3C's常見的HTTP執行問題還請參閱the Understanding URIs section。它在設計URI時有一個常見陷阱列表。另一個好資源是Resourceful Vs Hackable Search URLs

1

此外,您可能會考慮使用不同的動詞來重複使用相同的路線進行不同的動作。例如,對「產品/編輯/ 45」的GET請求將顯示產品編輯器,而POST到相同的URL會更新產品。您可以使用AcceptVerb屬性來實現:

[AcceptVerb("GET")] 
public ActionResult Edit(int id) 
{ 
    ViewData["Product"] = _products.Get(id); 
    return View(); 
} 

[AcceptVerb("POST")] 
public ActionResult Edit(int id, string title, string description) 
{ 
    _products.Update(id, title, description); 
    TempData["Message"] = "Changes saved successfully!"; 

    return RedirectToAction("Edit", new { id }); 
} 
0

爲了增加troethom的評論,REST風格通常也意味着,例如,去創造你會放一個代表到/用戶/ newusername

RESTful的基本使用5種標準的HTTP方法(GET,PUT一個新用戶,POST,DELETE,HEAD)來控制/訪問內容。

好吧,這是不容易的Web瀏覽器,但你可以隨時使用重載後(POST到/用戶/用戶名與用戶的表示,以改變一些細節,等

其做的事情,我會reccommend閱讀RESTFul Web services的一個很好的方式,以獲得更好的理解:d(這是一個不錯的書!)