【发布时间】:2011-03-09 09:50:40
【问题描述】:
ASP.NET MVC 2 控制器和操作使用 UpperCamelCase。
由于某些原因,包括 SO 在内的许多大型网站在 url 中使用小写(带下划线)来表示控制器和操作。例子:
https://stackoverflow.com/questions
https://stackoverflow.com/users/377920/randomguy
http://www.reddit.com/ad_inq/
http://www.wired.com/special_multimedia/mobile/
etc.
我想知道这是如何实现的。
默认路由器似乎不区分大小写,即。 stackoverflow.com/questions/ask 将毫无问题地被定向到 Questions-controller 的 Ask() 方法。
但是,假设我们想将 questions/add_to_favorites 定向到 Questions-controller 的 AddToFavorites() 操作。
- 这是如何实现的?
- 现在是否需要使用
Html.ActionLink("add_to_favorites")而不是Html.ActionLink("AddToFavorites")使HTML 中的链接指向questions/add_to_favorites而不是Questions/AddToFavorites?
编辑: 类似帖子
- How can I have lowercase routes in ASP.NET MVC?
- ASP.NET MVC: Get lowercase links (instead of Camel Case)
支持下划线的一种方法是使用 ActionName 属性:
[ActionName("add_to_favorites")]
public ActionResult AddToFavorites() {
// ...
}
但是,这不适用于控制器。也许如果我们可以在请求到达路由机制之前以某种方式删除请求中的所有下划线,那么它会起作用。
【问题讨论】:
-
快速旁注。请确保
add_to_favorite需要 POST。 GET 请求永远不应该修改服务器上的状态 -
同意!这不仅适用于 RESTful 纯粹主义者:状态变化的 GET 请求会造成安全漏洞。虽然,如果你强制授权并防止跨站点请求伪造(使用 AntiForgeryToken),我不认为 GET'ing 从技术上讲是一个问题。
-
请注意,仅添加 [HttpPost] 并不能解决安全问题;坏人可以简单地模拟一个表单帖子。因此,即使您强制 POST(或 AJAX 中的 DELETE/PUT),您仍然要小心。
标签: asp.net-mvc-2 asp.net-routing