0

次の URL を取得したいのですが、どうすればよいかわかりません。

1) global.asax に登録されたルート
2) コントローラのメソッド

URL/ルート

- http://www.mysite.com/
- http://www.mysite.com/?page=2
- http://www.mysite.com/?tags=fooBar
- http://www.mysite.com/?page=2&tags=fooBar

注意してください-http://www.mysite.com/{page}/{tags}/その違いが理にかなっていれば、などはしたくありません。デフォルトのルートについても理解していますが、必要なことを実行するためにそれらを微調整する方法がわかりません。

最後に、Html.ActionLink(..) の使用方法も知っているので、その使用方法について心配することはありません。

助言がありますか?

単体テスト

また、次のような単体テストを実行できるという印象も受けています:-(MvcFakesを使用)...

// Arrange.
var routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);  

// Act.
context = new FakeHttpContext("~/?page=2&tags=fooBar");
routeData = routes.GetRouteData(context);

// Assert.
Assert.AreEqual("Home", routeData.Values["controller"]);
Assert.AreEqual("Index", routeData.Values["action"]);
Assert.AreEqual(2, routeData.Values["page"]);
Assert.AreEqual("fooBar", routeData.Values["tags"]);

更新 1

これが役立つ場合は、これらすべての Index アクションをデフォルトの HomeController で実行したいと考えています。(実際には、HomeController の名前を PostController に変更しましたが、それはそれほど重要ではありません/問題に影響を与えるべきではありません)。

4

1 に答える 1

1

実際にやろうとしていることには、追加のルートは必要ありません。デフォルトの MVC ルートは、リクエストを適切に処理します。コントローラー アクションのパラメーター名は、URL パラメーター名と一致する必要があることに注意してください。

URL: http://www.mysite.com/?page=2&tags=fooBar

public ActionResult Index(string page, string tags)
{
   ViewData["Message"] = string.Format("Page={0}, Tags={1}", page, tags);
   return View();
}

もちろん、コントローラーの「ホーム」とアクションの「インデックス」はデフォルトです。しかし、要点は明らかです。

Scott Guthrie は、ルーティングに関する優れた投稿をしています

于 2009-02-09T13:00:14.583 に答える