1

次のような2つの異なるアクションメソッドで2つの異なるルートを作成しようとしています:

[GET("/project/create")]
public ActionResult Create()

[GET("/project/{projectId}")]
public ActionResult Details(int projectId)

問題は、/project/create に移動すると、projectId が int ではないために失敗する詳細ページにルーティングされることです。

Details ルートを次のように変更できることはわかっています/project/{projectId}/detailsが、逆の方法で機能させたいと思います。

また、解決策として、projectId を文字列にし、projectId == "create" の場合に内部的に Create アクションにリダイレクトすることもできますが、それはひどいと感じます。

これにはAttributeRoutingを使用しています。

4

2 に答える 2

3

v2.2 以降の属性ルーティングを使用している場合は、プロジェクト ID に制約を指定するだけです。

[GET("/project/{projectId:int}")]

また、v2.2 より前の場合は、正規表現を使用して同じ効果を得ることができます。

[GET("/project/{projectId(^[\\d]+$)}")]

ただし、より一般的なケースでは、属性のプロパティを設定することで、コントローラー内のルートの優先順位を指定できます。Precedence

[GET("/project/create", Precedence = 1)]
public ActionResult Create()

[GET("/project/{projectId}", Precedence = 2)]
public ActionResult Details(int projectId)
于 2012-06-01T11:46:08.113 に答える
0

アクションの順序によって優先順位が自動的に設定されます。したがって、作成アクションが詳細の前にあった場合、問題はないはずです。Precedence プロパティはもともと、それぞれにルートを持つ部分クラスを持つユーザーを支援するために開発されました。

ルートを適切に並べ替えることができない場合、またはさらに制御が必要な場合は、Rich の回答に良いヒントがあります。

于 2012-06-01T16:55:52.717 に答える