2

「/Users」に一致する MapRoute エントリを作成したいのですが、「/Users/etc」や「/Users/etc/etc」などのパスには一致しません。

「Users/{id}」(ID は int) と「Users/Me」(正常に動作しています) も一致させる必要があります。ID (@"\d+") に制約があります。

私はそれについてどのように行くか考えていますか?

以下を使用すると、上記のすべてに一致します。

routes.MapRoute(null, "Users", new { controller = "Users", action = "Index" });

制約を使用する必要がありますか? もしそうなら、どの制約を使用する必要がありますか?

ASP.NET MVC 3 を使用しています (重要な場合)。

4

3 に答える 3

2

MVC でルートを指定する順序は重要な部分です。システムはルートをたどり、必要な最初の一致を見つけます。

したがって、一般的なルートはリストのさらに下にある必要があります

この場合の順序

  • /ユーザー/etc/etc
  • /ユーザー/など
  • /Users (キャッチオールとして)

お役に立てれば?

ルーティングの詳細については、 http://www.asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs を参照してください。

于 2011-01-24T13:58:14.750 に答える
2

ルートを無視するために使用できる方法がありIgnoreRouteます。おそらく、次の方法で必要なことを実行できます。

routes.IgnoreRoute("Users/{*pathInfo}");

編集: MVC の制約についてはあまり読んでいませんが、正規表現のように見えますか?

更新での制約について言及\d+しましたが、これは数字のみ\S+に一致します。すべてのバースペースに一致するものを試してください。問題は、バックスラッシュにも一致する可能性があることです!

可能な代替手段は次のとおりです[a-zA-Z0-9]+

于 2011-01-24T13:59:18.077 に答える
0

正確な解決策は次のとおりです。

パラメータのidactionの場所を置き換えるだけで 、次のようになります。url

"Users/{action}/{id}" =>"Users/{id}/{action}"

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

これでも:

id = UrlParameter.Optional

yourapp.com/Usersまたは_yourapp.com/Users/whatever

参照回答MVC3でroutes.MapRouteの順序を変更するにはどうすればよいですか?

于 2011-09-21T18:08:22.787 に答える