2008-09-23 86 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(这是一个不错的书!)