1

ここで少し助けとアドバイス。

私の最初のMVCアプリケーションに取り組んでいて、Studentsセットアップのエンティティがあります。
基本的なCRUD機能を備えたStudentControllerとビュー。mysite.com/Studentが私をそこに連れて行ってくれます。

今度はPaymentsを追加したいので、Paymentsコントローラーと基本的なクラッドを備えたビューを追加しました。それは私にmysite.com/Paymentsを与えます

mysite.com/Student/PaymentsのようなURLで支払いを行いたい

そこで私はURLルーティングを調査しましたが、何も機能していないように見えたので、長い間逆方向に使用していました。しかし今、私はこの追加のルートを作成しました:

        routes.MapRoute(
            "Payments",
            "Student/Payments/{action}/{id}",
            new { Controller = "Payments", action = "Index", id = UrlParameter.Optional }
            );

そして今、それはすべて正しく機能しているようです。支払いコントローラーのアクションにActionLinkを送信すると、URLは正しいです。例:www.mysite.com/Student/Payments/Edit/5がURLとして表示されます。

私が抱えている問題は、PaymentsがまだベースURLルートであるということです。したがって、www.mysite.com/Paymentsにアクセスして支払いを受け取ることもできます。

mysite.com/Paymentsが無効になるように、そのルートを「削除」するにはどうすればよいですか?それとも私はこれをすべてお尻の後ろ向きに何らかの方法でやっていますか?

助けていただければ幸いです。

4

2 に答える 2

1

それについてのあなたの考えは、ぐるぐる回っています。マッピング構成は、特定の URL のコードが存在する場所を指定するルールの階層リストを提供するだけです。

つまり、まだ mysite.com/Payments にヒットしているということです。これは、Global.asax の既定のルールにヒットしているためです。

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults
            );

これを削除することはできますが、デフォルトのルールは機能しません。

または、無視ルールを追加できます。あなたの場合、次のようなもの

        routes.IgnoreRoute("Payments/{action}/{id}");

これをデフォルトのルールの上に置くようにしてください。

于 2012-06-02T15:09:34.567 に答える
0

デフォルト ルートに MapRoute メソッドのオーバーロードを使用する必要があります。

routes.MapRoute(  
  "Default",  
  "{controller}/{action}/{id}",  
  new { controller = "Home", action = "Index" },
  new { controller = ""}); //there constraints for controller goes

カスタム制約の作成に関するこのブログ投稿を見てください。「等しくない」の例があります。

于 2012-06-02T15:12:55.253 に答える