2011-08-12 19 views
2

私のMVC 3アプリケーションで、予想外の方法で壊れている単純なルート構造があります。MVC 3ルートのヘルプ

私のURL構造はかなり単純ですが、いくつかの変数が含まれています。

http://site.com/{location}/{stage}/{controller}/{action}/{id}

例:

  • http://site.com/ny/prod/server/list - nyのすべてのprodサーバーを一覧表示します。
  • http://site.com/ny/test/server/123456 - テストステージで、サーバーの詳細をIDでリストします123456
  • http://site.com/ny/prod/server/reboot/565656 - nyのプロダクトステージで、IDが565656
  • のサーバを再起動します。

私は自分のGlobal.asaxファイルに次のルートを作成しました。

routes.MapRoute("Default", "{location}/{stage}/{controller}/{action}/{id}", new {controller="server", action="list", id = UrlParameter.Optional}); 

これは、サーバー/詳細/ ID /でサーバおよびサーバの詳細のリストを表示するため正常に動作しますが、私は、再起動を実行しようとすると、私はエラーを取得します。

URL:http://site.com/ny/prod/server/reboot/565656

ビュー「NY」またはそのマスターが見つからなかったか、何のビュー・エンジンは 検索場所をサポートしていません。 ...

なぜ表示名ny.cshtmlを検索しようとしますか?

+1

なぜそれがny.cshtmlという名前のビューを見つけるためにしようとするだろうが、あなたが取ることができるわからないでルート制約を書くには良い記事を持っていると同じくらいPhil Haackのルートデバッガで見てください:http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx –

+0

あなたのルートマップを表示しますか? –

+0

Reboot()メソッドはどのように見えますか?さらに、便利なルートデバッガはhttp://getGlimpse.com/ – nikmd23

答えて

0

あなたの問題は、どの位置とステージがどのように表示されるかを定義するための制約を使用していないことと、誤ったポジティブを与えていたり、間違った順序

あなたが最後に定義されたデフォルトのMVCを持っていて、複数のカスタムルートを持っている場合のいずれかの場所が有効であると彼らは

例えばどのように見えるかを定義する正規表現またはカスタムの制約クラスを使用して制約http://site.com/ny/test/server/123456ことを確認してください

  • 有効な場所ニューヨーク - 有効な場所では、データベースまたは有効な 場所

  • のリストに対してそれを検証しているかを定義するカスタム制約が有効な段階のテストであることを確認 - 正規表現で十分かもしれないけどできるだけ正規表現を避けようとするのは、悪くて保守が難しいからです。再び私はどのステージが有効かを定義するためのカスタム制約を書くだろうリストに対する検証が十分であるかどうかは非常に多くの段階を取るべきではない あなたのURLにある方法にも注意して制約の中でルールを守って、釈放する人だけが..管理者または利害関係者の役割ルートと規則的または非認証されたユーザーにmachedことは、単純に次のルートに至るまで下落するだろうか、単にあなたの入力データをcontrainすることをお勧めされるように404の

書き込みルートは注意が必要です与えることができますあなたは、特にあなたが文字列データを受け入れていることができれば

スティーブンヴァルターは彼のblog