Как я должен сделать это ASP.NET Маршрут MVC?
-
22-08-2019 - |
Вопрос
я хотел бы иметь следующие 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, но это не очень важно / не должно влиять на проблему).
Решение
На самом деле для того, что вы пытаетесь сделать, вам не нужен дополнительный маршрут.Маршрут 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();
}
Конечно, это для контроллера "Home" и действия "Index" по умолчанию.Но суть, я надеюсь, ясна.
У Скотта Гатри есть отличный пост о маршрутизации Здесь