Как мне сделать этот маршрут ASP.NET MVC?

я хочу иметь следующие 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, но это не очень важно / не должно влиять на проблему).


person Pure.Krome    schedule 07.02.2009    source источник
comment
Похоже, вы запускаете все против действия Index на контроллере Home. Это правильно?   -  person JMS    schedule 09.02.2009
comment
это правильно. это то, чего я хочу.   -  person Pure.Krome    schedule 09.02.2009


Ответы (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();
}

Конечно, это значения по умолчанию для Controller «Home» и Action «Index». Но, надеюсь, суть ясна.

У Скотта Гатри отличный пост о маршрутизации Здесь

person Paul G.    schedule 09.02.2009
comment
Итак, вы предлагаете мне использовать следующий маршрут: routes.MapRoute (Home,, new {controller = Post, action = Index} ‹- хотя для страницы и тегов нет значений по умолчанию?); - person Pure.Krome; 10.02.2009
comment
Ой. опечатка. controller = Сообщение должно гласить: новый {controller = Home ...}. соз. - person Pure.Krome; 10.02.2009
comment
routes.MapRoute (по умолчанию, {controller} / {action} / {id}, new {controller = Home, action = Index, id =}); Да, по умолчанию, я сделал образец проекта, чтобы попробовать, и он хорошо сработал. - person Paul G.; 10.02.2009
comment
Кьюл! ты прав!!! Я подумал, что если бы у меня был метод signature = ›public ActionResult Index (строковая страница, строковые теги), тогда мне нужно было бы иметь страницу и теги в коде MapRoute (..), иначе он не смог бы найти правильный метод индекса. кевл !!!! - person Pure.Krome; 11.02.2009