3

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() アクションに向けたいとします。

  1. これはどのように達成されますか?
  2. HTML ポイント内のリンクを の代わりHtml.ActionLink("add_to_favorites") に の代わりに使用する必要がありますか?Html.ActionLink("AddToFavorites")questions/add_to_favoritesQuestions/AddToFavorites

編集:同様の投稿

アンダースコアをサポートする 1 つの方法は、ActionName 属性を使用することです。

[ActionName("add_to_favorites")]
public ActionResult AddToFavorites() {
  // ...
}

ただし、これはコントローラーでは機能しません。おそらく、ルーティング メカニズムに到達する前に、リクエストからアンダースコアをすべて削除できれば、うまくいくでしょう。

4

1 に答える 1

2

カスタムルートを手動で追加できます。これは普遍的なソリューションではなく、すべてのコントローラーとアクションに個別に追加する必要があります。

routes.MapRoute(
    "Web2.0 RoR style lowercase URLs with underscores", 
    "questions-foo/add_to_favorites", 
    new { controller = "Questions", action = "AddToFavorites" }
);

すばらしいのは、URLを生成するHtml-helperメソッドを変更する必要がないことです。ルーティングテーブルは、着信要求をルーティングし、URLを生成するために使用されます。それで、

Html.ActionLink("Add to favorites", "Questions", "AddToFavorites");にマップし/questions-foo/add_to_favoritesます。

デフォルトのルーティングメカニズムでは大文字と小文字が区別されないため、オリジナル/Question/AddToFavorites/qUeStIoN/aDdtOfAvOrItEs同様に機能することに注意してください。/qUeStIoNs-FOO/ADD_TO_FAVORITES

于 2010-06-30T00:41:55.320 に答える