2

通常の CRUD 操作を持つコントローラーのルートを設定したいのですが、詳細アクションで URL に「詳細」が表示されないようにしたいと考えています。Stackoverflow には、このタイプのルーティングが構成されているようです。

http://stackoverflow.com/questions/999999/
http://stackoverflow.com/questions/ask

このアナロジーを使用すると、私のルートは現在次のようになります。

http://stackoverflow.com/questions/Details/999999/

Details次のルートを追加することで、削除できました。

routes.MapRoute("Q1", "questions/{id}", 
    new { controller = "Questions", action = "Details" });

ただし、コントローラーで他のアクションをプルアップすると (たとえば/questions/new、この例の場合)、id を解析できないと不平を言っています。

他のすべてのアクション (MapRoute "items/create"、"items/delete" など) を Global.asax.cs に手動で入力する必要がないように、ルートを設定する方法はありますか? 基本的に、次のような2番目のルートが必要です。

routes.MapRoute("Q2", "questions/{action}", 
    new { controller = "Questions", action = "Index" });

{id}...そして、整数に一致し、それが文字列である場合、ルーティング エンジンにルート Q1 を使用{action}させます。これは可能ですか?

4

1 に答える 1

6

id フィールドが整数のみになるように最初のルート制約を設定すると、他のアクションはすべてデフォルトのままになると思います。

routes.MapRoute("Q1", 
   "questions/{id}", 
   new {controller = "Questions", action = "Details"},
   new { id=@"\d+" });

それ以外は、デフォルト ルートで処理する必要があります。したがって、「questions/3553」はこれにヒットしますが、「questions/ask」は一致しません。Global.asax.cs ファイルの最初に、より具体的なルートを配置することをお勧めします。

于 2009-06-16T12:50:42.350 に答える