2011-01-16 13 views
1

私は.net mvcには初めてです。 一言で言えば、私は自分のウェブサイトを見て、人々がタイプすることができるようにしたいと思います: mywebsite/John @ Eric そして正しいコントローラで処理されます。 名前がMyWebSite/GetPeopleasp.net mvcルーティングと不思議404

とGetPeopleの作用によってproccessedます:

一方

、私はまたのような直接的なアクションを指定できるようにしたいと思います。

私は自分のアプリケーションに2つのルーティングルールを設定している

最初のルート

routes.MapRoute("Default", 
        "{id}", 
      new { controller = "Friends", action = "Index", id = UrlParameter.Optional }, 
      new { controller = @"[^\.]*", id = @"(?i)[a-z]*@[a-z]*" } 
     ); 

第2の経路

routes.MapRoute(
     "Friends", 
     "{action}/{id}", 
     new { controller = "Friends" } 
     ); 

第一およびデフォルトルートが素晴らしい作品を、しかし、次のようなリクエストを送信すると、mywebsite/GetPeople の場合、厄介なインデックスアクションが引き継ぎ、パラメータであるかのようにGetPeopleを読み込みます。本当に素晴らしいレガックスを追加しましたが、これはうまくいかないようです。

アイデア?

答えて

1

は、あなたのルートがどのように見えるかだ得ることができます。

+0

@ダーリン、それは素晴らしいです。しかし、両方のルートが同じコントローラ(この場合は "Friends")によってハンドリングされるとどうなりますか?これは私の場合であり、フィックスアップがあるようです。 – vondip

+0

@vondip 'Default'ルートに' controller = "Friends" 'を指定してみてください。あなたが 'GetPeople'コントローラについて話したところであなたの質問が混乱しましたが、実際には' Friends'コントローラに 'GetPeople'アクションが必要です。 –

+0

@ダーリン、そこに私のミックスアップをコントローラーとして名前をつけて固定しました。私はそれを試してみましたが、うんざりしてもうまくいかないようです。私は両方のルートが同じコントローラにマップされていることを素早く思い出させる。それは私のナッツを運転しています。 – vondip

0

これは、ルーティングがMVCで動作するためです。 RegisterRoutesでルートが宣言された順番で、着信URLをルートと照合するだけです。この場合、URLのGetPeopleはすべてがオプションであるため、Idパラメータと一致します。これを修正するために、私は最後のルートとしてデフォルトを追加します。

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

これはGetMyPeople URLを処理します。あなたはそれにインデックスアクションを持っている必要があります。 MvcContribには、実際にアプリケーションからMVCルートを実行する前に、MVCルートをテストするための優れたテストヘルパーがあります。

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Friends", 
     "{id}", 
     new { controller = "Friends", action = "Index", id = UrlParameter.Optional }, 
     new { id = @"(?i)[a-z]*@[a-z]*" } 
    ); 

    routes.MapRoute(
     "Default", 
     "{action}/{id}", 
     new { controller = "Friends", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

mywebsite/[email protected]FriendsコントローラのIndex作用によって処理されますとmywebsite/GetPeopleFriendsコントローラのGetFriends作用によって処理されます:あなたはここにビットhere

+0

これは、アクションをパラメータとして同じデフォルトのハンドラにリクエストを送信しているようです。 – vondip

+0

aah!私は元の質問に基づいてGetPeopleというコントローラを持っていると思ったが、GetPeopleという名前のアクションがあるようだ。 – Hakeem

+0

もしそうだったなら、私が提案した修正がうまくいったはずだ。 – Hakeem